2011-10-17 9 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: '/ /フィールド[@名前= 'my_cool_id'] /値/テキスト()' –

+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 
} 
関連する問題