【问题标题】:Iterate through each XElement in an XDocument遍历 XDocument 中的每个 XElement
【发布时间】:2013-03-04 05:54:01
【问题描述】:

我有一个如下所示的 XML:

<myVal>One</myVal>
<myVal>Two</myVal>
<myVal>Three</myVal>
<myVal>Four</myVal>
<myVal>Five</myVal>

我想将它加载到 XDocument 中,然后遍历该 XDocument 中的每个 XElement 并计算每个元素中的字符数。

最好的方法是什么?

首先,我注意到我必须添加一个根元素,否则 XDocument.Parse() 将无法将其解析为 XML。所以我补充说:

<span>
        <myVal>One</myVal>
        <myVal>Two</myVal>
        <myVal>Three</myVal>
        <myVal>Four</myVal>
        <myVal>Five</myVal>
</span>

但是当我这样做时:

foreach (XElement el in xDoc.Descendants())

el 将包含整个 XML,从第一个 &lt;span&gt; 开始,包括每个 &lt;myVal&gt;s,然后以 &lt;/span&gt; 结束。

如何使用 XDocument 遍历每个 XML 元素(&lt;myVal&gt;One&lt;/myVal&gt; 等)?

我事先不知道所有 XML 元素将被命名为什么,所以它们不会总是被命名为“myVal”。

【问题讨论】:

    标签: c# linq-to-xml


    【解决方案1】:

    这样做:

    string xml = "  <span><myVal>One</myVal><myVal>Two</myVal><myVal>Three</myVal><myVal>Four</myVal><myVal>Five</myVal></span>";
    XmlReader xr = XmlReader.Create(new StringReader(xml));
    var xMembers = from members in XElement.Load(xr).Elements() select members;
    
    foreach (XElement x in xMembers)
    {
        var nodeValue = x.Value;
    }
    

    现在,如果您看到 nodeValue 的值,您将得到一二等

    【讨论】:

    • 为什么要对查询应用身份选择?
    【解决方案2】:

    使用doc.Root.Elements()(用于根节点的直接子节点,我认为这正是您想要的)或doc.Root.Descendants()(如果您想要每个子节点,包括&lt;myVal/&gt; 的任何可能子节点)。

    【讨论】:

      猜你喜欢
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多