2012-07-31 51 views
1

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

回答

2

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

这意味着获得这有一个属性“ID”的值42.

你可以做所有的节点只是//*这该怎么回报在树中的所有节点。

的Xpath: http://msdn.microsoft.com/en-gb/library/ms950786.aspx

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

+0

是啊,这就是我要找的。我可以一次获取所有路径 - 加载XML文件,然后我可以使用它们线性地获得所有节点:) Thx – Nickon 2012-07-31 13:25:24

+1

为了更快速,您应该在XPath中添加更多受限制的参数:),如属性,具有节点“富”作为父母或类似的东西。 – ykatchou 2012-07-31 13:44:51

1

你可以使用XElement.Elements()所有子元素。

下面是一个使用递归以获得各个级别的所有元素一些代码:

void GetElements(XElement element){ 
    var elements = element.Elements(); 

    foreach(Element e in elements){ 
     //some stuff here 

     if(e.Elements() != null) 
      GetElements(e); 
    } 
} 
+0

使用这个我只会从我的XElement中得到-1级的孩子。然后我需要通过重复.Elements()来获得另一个关卡。我想避免它。 – Nickon 2012-07-31 13:22:58

+0

@Nickon我发布了一些使用递归的代码。 – 2012-07-31 13:29:17

+1

Thx,我会尝试这两种方法 – Nickon 2012-07-31 13:32:01