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()?我不记得那是广度优先还是深度优先,但它会递归地找到文档中的所有元素......

请注意,您的示例代码使用XmlElementand XmlText,但您的标签显示xdocument。我首先看到了标签,这让我认为您使用的是 LINQ to XML。如果您使用 LINQ to XML 但可以这样做,我建议您这样做。目前还不完全清楚你真正想要做什么,但如果你需要打印所有元素的文本,那真的很容易:

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

当然,这将为“空”元素写一个空行 - 如果您想避免这种情况,您可以在写入控制台之前进行检查。

于 2012-06-28T16:25:31.647 回答