2

HTMLタグの文字列を分割したい。たとえば、文字列を取得しました:

<p></p>

<table>

<table><p></p></table>


</table>

私が取得したいのは:

<table>

<table><p></p></table>


</table>

問題は今、私が電話しているときです:

string[] values = pContent.Split(new string[] {"<table>","</table>" }, StringSplitOptions.RemoveEmptyEntries);

私は得ています:

<table>

    <table><p></p>

残りはどうやって手に入れるの?

4

1 に答える 1

4

次のコードを試すことができます。

        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[] として返されます。

于 2012-07-06T12:44:10.363 に答える