2011-10-17 4 views
10

XDocument를 사용하여 다음 xml에서 "my_cool_id"구문 분석에 대한 도움을 얻을 수 있습니까?XDocument를 사용하여 XML 구문 분석

<?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

을 시도를? 귀하의 시도가 예상 한 결과는 무엇입니까? 예상대로 작동하지 않는 것은 무엇입니까? 당신이 그것을 분석하고 싶을 때 그 결과는 무엇을 원하는가? –

+0

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

+0

@MarcB : 네임 스페이스 때문에 그 것이 효과가 있다고 생각하지 않습니다. –

답변

35

네임 스페이스에 희생당한 것 같습니다.

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

을 또는 단지 하나 개의 특정 요소를 확인하는 방법은 다음과 같습니다 :이 시도 당신은 무엇을

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 
}