2013-03-15 18 views
11

Şöyle bir XML vardır:Bıkmadan

<myVal>One</myVal> 
<myVal>Two</myVal> 
<myVal>Three</myVal> 
<myVal>Four</myVal> 
<myVal>Five</myVal> 

ben bir XDocument içine yüklemek ve daha sonra bu XDocument her XElement yineleme ve karakter sayısını saymak istiyor her bir öğe.

Bunu yapmanın en iyi yolu nedir?

İlk kapalı, bir kök öğesi veya XDocument.Parse() eklemek zorunda olduğumu fark ettim XML olarak ayrıştırmak mümkün olmaz. Bu yüzden ekledi:

<span> 
     <myVal>One</myVal> 
     <myVal>Two</myVal> 
     <myVal>Three</myVal> 
     <myVal>Four</myVal> 
     <myVal>Five</myVal> 
</span> 

Ama sonra ne zaman:

foreach (XElement el in xDoc.Descendants()) 

el, ilk <span> ile başlayan <myVal> s her biri dahil ve sonra biten tüm XML içerecektir </span>.

XDocument kullanarak XML öğelerinin her birini (<myVal>One</myVal> vb.) Nasıl yineliyorum?

Tüm XML öğelerinin adının ne olacağını önceden bilmiyorum, bu nedenle her zaman "myVal" olarak adlandırılmayacaklar.

cevap

15

kullanın doc.Root.Elements() veya doc.Root.Descendants() (doğrudan Ne istediğini gerçekten olduğunu düşünüyorum kök düğümün çocuklar için) (eğer <myVal/> olası çocuk olmak üzere her soyundan, isterseniz).

2

böyle yapın:

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; 
} 

Şimdi İki vb

+2

Neden bir kimlik sorgunuzla seçmek başvurduğunuz sen One alacak nodeValuedeğerini görürsek? – Servy