我尝试在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”)确实找到了任何节点。
答案 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");