XDocument不返回预期的节点

时间:2016-03-22 15:38:32

标签: c# xml

我尝试在C#中使用XDocument但是有一些问题需要接收所需的元素。这是我的样本xml

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

假设给定的XML我想用XDocument提取字段值。目前我没有使用这种方法接收任何条目

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

该文件已成功加载到xfdfData对象中,但Descendants(“fields”)确实找到了任何节点。

1 个答案:

答案 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");