Подтвердить что ты не робот

Итерации через каждый 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".

4b9b3361

Ответ 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 и т.д.