首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >递归遍历XML文档

递归遍历XML文档
EN

Stack Overflow用户
提问于 2012-06-29 00:23:10
回答 1查看 373关注 0票数 0

我正在寻找一种在不指定XPATH或XQUERY表达式的情况下递归遍历XML文档的好方法。只需从根节点开始。我需要保留节点的元素和文本。

类似于:

代码语言:javascript
运行
复制
    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。我发布的代码的问题是将元素的文本绑定在一起。因此,我可以在另一个进程中匹配元素名称,并将其设置为等于文本的值。因此,我可以使用约定来进行映射。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-29 00:25:32

你有什么理由不想XDocument.Descendants()吗?我不记得这是广度优先还是深度优先,但它会递归地找到文档中的所有元素……

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

代码语言:javascript
运行
复制
foreach (var element in doc.Descendants())
{
    Console.WriteLine(element.Value);
}

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11248896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档