我有一个如下所示的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”。
答案 0 :(得分:17)
使用doc.Root.Elements()
(对于根节点的直接子节点,我认为它实际上是您想要的)或doc.Root.Descendants()
(如果您想要每个后代,包括<myVal/>
的任何可能子节点)。
答案 1 :(得分: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 的值,您将获得One Two等