2011-10-17 17 views
10

È possibile ottenere aiuto nell'analisi del "my_cool_id" dal seguente xml utilizzando XDocument?Analisi XML tramite 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

Che cosa hai provato? quale era il risultato atteso delle tue prove? cosa non ha funzionato come previsto? Quando vuoi analizzarlo, cosa desideri che il risultato sia? –

+0

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

+0

@MarcB: Non penso che funzionerà così com'è, a causa dei namespace. –

risposta

35

Ho il sospetto che tu sia stato perplesso dal namespace. Prova questo:

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

o per trovare solo quello specifico elemento:

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 
}