2010-02-09 9 views
11

मैं कुछ एक्सएमएलमैं विशेषता द्वारा एक्सडी दस्तावेज़ को कैसे क्रमबद्ध कर सकता हूं?

<Users> 
    <User Name="Z"/> 
    <User Name="D"/> 
    <User Name="A"/> 
</User> 

मैं सॉर्ट करने के लिए है कि नाम द्वारा चाहते हैं। मैं XDocument का उपयोग कर उस XML को लोड करता हूं। मैं नाम से क्रमबद्ध xml कैसे देख सकता हूं?

उत्तर

13

आप, एक्सएमएल के लिए LINQ का उपयोग कर सॉर्ट कर सकते हैं, तो XmlDocument मामले

XDocument input = XDocument.Load(@"input.xml"); 
XDocument output = new XDocument(
    new XElement("Users", 
     from node in input.Root.Elements() 
     orderby node.Attribute("Name").Value descending 
     select node)); 
+0

मैं ऐसा नहीं है, लेकिन मैं एक अपवाद है। "कम से कम एक वस्तु को IComparable लागू करना चाहिए"। – cagin

+0

इसे 'नोड' एट्रिब्यूट ("नाम") होना चाहिए। वैल्यू –

+0

एफवाईआई, एक स्ट्रेट 'नोड। एट्रिब्यूट ("नाम") कर रहा है। वैल्यू' यदि आप विशेषता खो रहे हैं तो आप एक शून्य संदर्भ अपवाद के लिए खुलते हैं। साथ ही, यदि एक्सएमएल दस्तावेज़ स्कीमा निर्दिष्ट करता है, तो बस 'नोड। एट्रिब्यूट ("नाम")' पर्याप्त नहीं होगा, क्योंकि आपको विशेषता खोजने के लिए उचित 'XName' का उपयोग करना होगा। –

0
XDocument xdoc = new XDocument(
    new XElement("Users", 
     new XElement("Name", "Z"), 
     new XElement("Name", "D"), 
     new XElement("Name", "A"))); 

var doc = xdoc.Element("Users").Elements("Name").OrderBy(n => n.Value); 
XDocument doc2 = new XDocument(new XElement("Users", doc)); 
+0

नाम एक विशेषता है, तत्व नहीं;) –

+0

@ Daniel: ओह बकवास! ओह ठीक है, मेरे बुरे। ओपी सही कर सकते हैं – kd7