在 XDocument 中迭代每个 XElement

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>,最后以 </span> 结束。

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

我事先不知道所有XML元素的名称,因此它们并不总是命名为“myVal”。

2个回答

18

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


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 的值,您将得到 One Two 等等。


3
你为什么在查询中应用了身份选择? - Servy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接