0

XPATHまたはXQUERY式を指定せずにXMLドキュメントを再帰するための優れたアプローチを探しています。ルートノードから開始します。ノードの要素とテキストを保持する必要があります。

似たようなもの:

    private void RecurseXml(XmlNode root)
    {
        if (root is XmlElement)
        {
            Console.WriteLine(root.Name);
            if (root.HasChildNodes)
                RecurseXmlDocument(root.FirstChild);
            if (root.NextSibling != null)
                RecurseXmlDocument(root.NextSibling);
        }
        else if (root is XmlText)
        {
            string text = ((XmlText)root).Value;
            Console.WriteLine(text);
        }

再帰プロセスが、xpathを使用するのではなく、子であるかどうかを判断する場合。私が投稿したコードの問題は、要素のテキストを結び付けることです。したがって、私が持っている別のプロセスで要素名を照合し、それをテキストの値と等しく設定することができます。したがって、規則を使用してマッピングを行うことができます。

4

1 に答える 1

1

あなたがしたくない理由は何XDocument.Descendants()ですか?それが幅優先か深さ優先かは思い出せませんが、ドキュメント内のすべての要素が再帰的に検出されます...

サンプルコードではとを使用XmlElementしてXmlTextいますが、タグには。と記載されていることに注意してくださいxdocument。最初にタグを見たので、LINQtoXMLを使用していると思いました。LINQ to XMLを使用していないが、使用できる場合は、使用することをお勧めします。本当にやりたいことは完全には明確ではありませんが、すべての要素のテキストを印刷する必要がある場合は、それは本当に簡単です

foreach (var element in doc.Descendants())
{
    Console.WriteLine(element.Value);
}

もちろん、これは「空の」要素に対して空の行を書き込みます-それを避けたい場合は、コンソールに書き込む前に確認することができます。

于 2012-06-28T16:25:31.647 に答える