Итерации через каждый XElement в XDocument
У меня есть XML, который выглядит так:
<myVal>One</myVal>
<myVal>Two</myVal>
<myVal>Three</myVal>
<myVal>Four</myVal>
<myVal>Five</myVal>
Я хочу загрузить это в XDocument, а затем перебирать каждый XElement в этом XDocument и подсчитывать количество символов в каждом элементе.
Каков наилучший способ сделать это?
Во-первых, я заметил, что мне нужно добавить корневой элемент или 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>
.
Как выполнить итерацию через каждый из элементов XML (<myVal>One</myVal>
и т.д.) с помощью XDocument?
Я заранее не знаю, как будут называться все элементы XML, поэтому они не всегда будут называться "myVal".
Ответы
Ответ 1
Используйте doc.Root.Elements()
(для прямых дочерних элементов корня node, который, я думаю, вам действительно нужен) или 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 и т.д.