次のコードを試すことができます。
string input = String.Concat("<root>", @"<p></p><table><table><p></p></table></table>", "</root>");
XDocument doc = XDocument.Parse(input);
var valuesStr = doc.Root.Element("table").ToString();
string[] values = Regex.Matches(valuesStr, @"<.+?>")
.Cast<Match>()
.Select(o => o.Groups[0].Value)
.ToArray();
最初に XDocument クラス (XML を解析するためのクラスの 1 つ) のインスタンスを作成し、「root」という名前のルート要素を追加して、XDocument を作成できるようにします (すべての XML ドキュメントにはルートが必要です)。XML ドキュメントのコンテンツは文字列から解析されます。次に、ドキュメントのテキスト表現を含む文字列を取得します。これを行うには、「table」要素がルート ノードのすぐ下にあるため、最初に Root プロパティにアクセスします。その後、最初の要素を取得する「table」を含む Element() メソッドが呼び出されます。ルートの下に "table" という名前を付けて (この例では、ノードの下にそのような要素が 1 つだけあります)、その後、ToString() はテキストの説明を取得します。
Regex.Matches は文字列からすべての要素を抽出するために使用され、Cast() によって IEnumerable にキャストされる MatchCollection を返します。その後、Select() 拡張メソッドが IEnumerable で呼び出され、Regex.Matches によってキャプチャされたテキスト値が取得されます。 IEnumerable のすべての一致の場合、これらの値は ToArray() メソッドによって string[] として返されます。