2013-03-15 8 views
11

मैं एक एक्सएमएल है कि इस तरह दिखता है:दोहराएं

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

मैं लोड करने के लिए है कि एक XDocument में और फिर उस XDocument में प्रत्येक XElement के माध्यम से पुनरावृति और में वर्णों की संख्या गिनती चाहते हैं प्रत्येक तत्व।

ऐसा करने का सबसे अच्छा तरीका क्या है?

सबसे पहले, मैंने देखा कि मुझे रूट तत्व या XDocument.Parse() को एक्सएमएल के रूप में पार्स करने में सक्षम नहीं होना चाहिए। तो मैं कहा:

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

लेकिन तब जब मैं कार्य करें:

foreach (XElement el in xDoc.Descendants()) 

el पूरे एक्सएमएल शामिल होंगे, पहले <span> के साथ शुरू, <myVal> के प्रत्येक और हर एक सहित और उसके बाद के साथ समाप्त </span>

मैं XDocument का उपयोग कर प्रत्येक XML तत्व (<myVal>One</myVal> आदि) के माध्यम से कैसे पुन: प्रयास करूं?

मुझे पहले से पता नहीं है कि सभी एक्सएमएल तत्वों का नाम क्या होगा, इसलिए उन्हें हमेशा "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

संबंधित मुद्दे