2013-03-15 3 views
11

У меня есть XML, который выглядит следующим образом:Итерация через каждый XElement в XDocument

<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».

ответ

15

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 вы получите один два и т.д.

+2

Почему Вы подаете заявление тождества выбрать для запроса? – Servy

Смежные вопросы