如何迭代到下一个兄弟xml元素?

时间:2013-05-19 12:56:39

标签: c# xml linq-to-xml

考虑您有以下xml结构:

<root>
  <File> a.txt 
      <Version> 1.5 </Version>
  </File>

  <File> b.txt 
      <Version> 1.0 </Version>
  </File>
</root>

如果我持有一个包含该元素的变量:

<File> a.txt 
          <Version> 1.5 </Version>
</File>

如何获得下一个元素的句柄:

<File> b.txt 
      <Version> 1.0 </Version>
</File>

我一直在尝试XElement.nextNode()这样的事情,但是得到了null而不是合理的句柄

2 个答案:

答案 0 :(得分:1)

您可以使用ElementsAfterSelf

var nextElement = currentElement.ElementsAfterSelf("File").FirstOrDefault();
if (nextElement != null)
{
    ...
}

或者,尝试重构代码,以便可以在所有元素上使用循环开头:

foreach (var fileElement in parentElement.Elements("File"))
{
    ...
}

(在这两种情况下,如果你只想要下一个元素,你可以省略元素名称。)

答案 1 :(得分:0)

据我所知,您在此提供的XML结构不正确或标准结构。我可能错了,但这应该是:

<root>
  <File>
      <Name>a.txt</Name>
      <Version>1.5</Version>
  </File>

  <File>
      <Name>b.txt</Name> 
      <Version>1.0</Version>
  </File>
</root>

现在,您可以使用Lambda表达式

轻松跟踪标记名称和版本的值
XDocument xd = XDocument.Load("XMLPath/xmlname.xml");
IEnumerable<XElement> lstxe = xdoc.XPathSelectElements("//root/File");
foreach(XElement xele in lstxe )
{
// here you can get the each value
}