2011-10-17 118 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 
}