【问题标题】:XDocument does not return the expected nodeXDocument 未返回预期的节点
【发布时间】:2016-03-22 23:46:21
【问题描述】:

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

【问题讨论】:

  • 试试:xfdfData.Root.Descendants("fields");
  • @Kevin:不,这无济于事。问题在于命名空间。

标签: c# xml


【解决方案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");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 2013-09-04
    • 2016-02-13
    • 2012-10-05
    相关资源
    最近更新 更多