【问题标题】:Check all the children for XElement检查所有子元素的 XElement
【发布时间】:2012-07-31 13:14:50
【问题描述】:

我有 XElement 对象,这是我从 XML 文件中读取的 XML 树。现在我想检查这棵树中的所有节点以获取第一个属性名称和值。有没有简单的方法来遍历所有节点(从根到叶)?我的 XML 文件有很多不同且奇怪的节点——这就是解决这个问题更难的原因。我想写一些递归,但希望这是另一种更容易解决的方法。

【问题讨论】:

    标签: c# xml linq


    【解决方案1】:

    也许看看 Xpath。像 //*[@id=42] 这样的 XPath 可以完成这项工作。

    意思是获取属性“id”为42的所有节点。

    您可以只使用//*,它将返回树中的所有节点。

    X 路径: http://msdn.microsoft.com/en-gb/library/ms950786.aspx

    语法: http://msdn.microsoft.com/en-us/library/ms256471.aspx

    【讨论】:

    • 是的,这就是我要找的。我可以一次获取所有路径 - 在加载 XML 文件时,然后我可以使用它们线性获取所有节点:) Thx
    • 您应该在 XPath 中添加更多受限制的参数,以便更快:),例如属性,将节点“foo”作为父节点或类似的东西。
    【解决方案2】:

    您可以使用XElement.Elements() 获取所有子元素。

    这是一些使用递归来获取每个级别的所有元素的代码:

    void GetElements(XElement element){
        var elements = element.Elements();
    
        foreach(Element e in elements){
            //some stuff here
    
            if(e.Elements() != null)
               GetElements(e);
        }
    }
    

    【讨论】:

    • 使用它,我将只从我的 XElement 中获取级别 -1 的子级。然后我需要通过重复.Elements() 来获得另一个级别。我想避免它。
    猜你喜欢
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    • 2011-05-15
    • 2017-11-26
    • 2020-02-21
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多