2009-09-17 13 views
7

साथ एक्सएमएल वंशज का चयन मैं निम्न XML संरचना है:सी # - Linq

<row> 
    <field name="Id">1</field> 
    <field name="AreaId">1</field> 
    <field name="Name">ת&quot;א</field> 
</row> 
<row> 
    <field name="Id">2</field> 
    <field name="AreaId">4</field> 
    <field name="Name">אבטליון</field> 
</row> 

मैं Linq साथ name नोड पर पुनरावृति करना चाहते हैं। मैं इस कोशिश की:

var items = (from i in doc.Descendants("row") 
        select new 
        { 
         Text = i.Value 

        }).ToList(); 

लेकिन यह जिस तरह से मैं इसे करने की जरूरत है काम नहीं किया। कोई सुझाव?

<rows> 
<row> 
    <field name="Id">1</field> 
    <field name="AreaId">1</field> 
    <field name="Name">ת&quot;א</field> 
</row> 
<row> 
    <field name="Id">2</field> 
    <field name="AreaId">4</field> 
    <field name="Name">אבטליון</field> 
</row> 
</rows> 

कि आप एक्सएमएल लोड करने के लिए निम्न कोड का उपयोग कर सकते करने के बाद:

string xml = //Get your XML here  
XElement xElement = XElement.Parse(xml); 
//This now holds the set of all elements named field 
var items = 
     xElement 
     .Descendants("field") 
     .Where(n => (string)n.Attribute("name") == "Name"); 

उत्तर

14
var items = doc.Descendants("field") 
       .Where(node => (string)node.Attribute("name") == "Name") 
       .Select(node => node.Value.ToString()) 
       .ToList(); 
10

सबसे पहले, सुनिश्चित करें कि आपके एक्सएमएल एक भी रूट नोड है बनाना लिंक से एसक्यूएल सबसे प्रत्यक्ष दृष्टिकोण है:

var items = (from c in doc.Descendants("field") 
      where c.Attribute("name").Value == "Name" 
      select c.Value 
      ).ToList(); 
+2

किरण, आप हैं मेरा पसंदीदा। बड़ा ऊपर। – RhysC

1

मुझे लगता है कि

+7

यह "क्वेरी समझ वाक्यविन्यास" है, लिंक-टू-एसक्यूएल नहीं :) –

+0

"आपने मुझे टोस्टिस्ट()" – RhysC