13

我有一个如下所示的 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,从第一个 开始<span>,包括每个<myVal>s,然后以 . 结尾</span>

如何<myVal>One</myVal>使用 XDocument 遍历每个 XML 元素(等)?

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

4

2 回答 2

18

使用doc.Root.Elements()(对于根节点的直接子节点,我认为这确实是您想要的)或doc.Root.Descendants()(如果您想要每个后代,包括任何可能的子节点<myVal/>)。

于 2013-03-15T13:30:59.667 回答
2

这样做:

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的值, 您将得到一二等

于 2013-03-15T13:50:34.603 回答