2016-03-22 10 views
0

私はC#でXDocumentを操作しようとしますが、希望する要素を受け取るのにいくつか問題があります。ここに私のサンプルxmlですXDocumentは予想されるノードを返しません

<?xml version="1.0" encoding="UTF-8"?> 
<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve"> 
    <f href="@{pdffile}"/> 
    <ids modified="BF43C70442ECB74FA49833BBA44D4679" original="B4870CC046121A41B7D8F0838C87256D"/> 
    <fields> 
    <field name="FormInstanceID"><value>@{instanceid}</value></field> 
    <field name="meta_7"><value>@{meta_7}</value></field> 
    <field name="meta_6"><value>@{meta_6}</value></field> 
    <field name="meta_8"><value>@{meta_8}</value></field> 
    <field name="meta_3"><value>@{meta_3}</value></field> 
    <field name="meta_2"><value>@{meta_2}</value></field> 
    <field name="meta_5"><value>@{meta_5}</value></field> 
    <field name="meta_4"><value>@{meta_4}</value></field> 
    <field name="meta_1"><value>@{meta_1}</value></field> 
    <field name="tag_5"><value>@{tag_5}</value></field> 
    <field name="tag_1"><value>@{tag_1}</value></field> 
    <field name="tag_2"><value>@{tag_2}</value></field> 
    <field name="tag_3"><value>@{tag_3}</value></field> 
    <field name="TAGS"><value>@{TAGS}</value></field> 
    <field name="tag_4"><value>@{tag_4}</value></field> 
    <field name="qr"><value>@{qr}</value></field> 
    <field name="metadata"><value>@{metadata}</value></field> 
    <field name="pdx.dynform.email"><value>@{pdx.dynform.email}</value></field> 
    </fields> 
</xfdf> 

私はXDocumentでフィールド値を抽出したいと思います。現在、私は

XDocument xfdfData = XDocument.Load(xfdf); 
var result = xfdfData.Descendants("fields"); 

ファイルを、このアプローチを使用して、任意の入力を受けるんsucessfully xfdfDataオブジェクトにロードされていないが、子孫(「フィールド」)は、任意のノードを検索しています。

+1

試してみてください。xfdfData.Root.Descendants( "フィールド")。 – Kevin

+0

@ケビン:いいえ、それは役に立たないでしょう。問題は名前空間です。 –

答えて

1

名前空間にないfields要素がありません。これはあなたが求めている要素です。ルート要素でこれに:

xmlns="http://ns.adobe.com/xfdf/" 

...子孫ノードのデフォルトの名前空間URIはhttp://ns.adobe.com/xfdf/です。だから、欲しい:

XNamespace ns = "http://ns.adobe.com/xfdf/"; 
XDocument doc= XDocument.Load(xfdf); 
var result = doc.Descendants(ns + "fields"); 

それともfield要素自体見つける:

XNamespace ns = "http://ns.adobe.com/xfdf/"; 
XDocument doc= XDocument.Load(xfdf); 
var fields = doc.Descendants(ns + "field"); 
関連する問題