2011-10-17 46 views
10

Tôi có thể nhận được một số trợ giúp phân tích cú pháp "my_cool_id" từ xml sau bằng XDocument không?Phân tích cú pháp XML bằng cách sử dụng XDocument

<?xml version="1.0" encoding="UTF-8"?> 
<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve"> 
    <fields> 
    <field name="field_name_1"> 
     <value>12345</value> 
    </field> 
    <field name="my_cool_id"> 
     <value>12345</value> 
    </field> 
    <field name="field_name_2"> 
     <value>12345</value> 
    </field> 
    <field name="field_name_3"> 
     <value>12345</value> 
    </field> 
    </fields> 
</xfdf> 
+2

Bạn đã thử gì? kết quả mong đợi của những nỗ lực của bạn là gì? những gì không hoạt động như mong đợi? Khi bạn muốn phân tích nó, bạn muốn kết quả là gì? –

+0

Xpath: '// field [@ name = 'my_cool_id']/value/text()' –

+0

@MarcB: Tôi không nghĩ rằng nó sẽ hoạt động như vậy, do không gian tên. –

Trả lời

35

Tôi nghi ngờ bạn đang bị bối rối bởi không gian tên. Hãy thử điều này:

XDocument doc = XDocument.Load("test.xml"); 
XNamespace ns = "http://ns.adobe.com/xfdf/"; 

foreach (XElement element in doc.Root 
           .Element(ns + "fields") 
           .Elements(ns + "field")) 
{ 
    Console.WriteLine("Name: {0}; Value: {1}", 
         (string) element.Attribute("name"), 
         (string) element.Element(ns + "value")); 
} 

Hoặc để tìm kiếm chỉ là một yếu tố cụ thể:

XDocument doc = XDocument.Load("test.xml"); 
XNamespace ns = "http://ns.adobe.com/xfdf/"; 
var field = doc.Descendants(ns + "field") 
       .Where(x => (string) x.Attribute("name") == "my_cool_id") 
       .FirstOrDefault(); 

if (field != null) 
{ 
    string value = (string) field.Element("value"); 
    // Use value here 
} 
Các vấn đề liên quan