【问题标题】:XmlNodeList SelectNodes troubleXmlNodeList SelectNodes 麻烦
【发布时间】:2011-10-23 16:07:31
【问题描述】:

我正在尝试解析一个 xml 文件

我的代码如下:

 string path2 = "xmlFile.xml";
 XmlDocument xDoc = new XmlDocument();
 xDoc.Load(path2);
 XmlNodeList xnList = xDoc.DocumentElement["feed"].SelectNodes("entry");

但似乎无法获取节点列表。我收到错误消息-“使用'new'关键字创建对象实例。”它似乎在'SelectNodes(“entry”)' 当我从 rss 提要加载 xml 时,此代码有效,但不是本地文件。你能告诉我我做错了什么吗?

我的 xml 看起来像:

<?xml version="1.0"?>
 <feed xmlns:media="http://search.yahoo.com/mrss/" xmlns:gr="http://www.google.com/schemas/reader/atom/" xmlns:idx="urn:atom-extension:indexing" xmlns="http://www.w3.org/2005/Atom" idx:index="no" gr:dir="ltr">
  <entry gr:crawl-timestamp-msec="1318667375230">
   <title type="html">Title 1 text</title>
   <summary>summary 1 text text text</summary>
  </entry>
  <entry gr:crawl-timestamp-msec="1318667375230">
   <title type="html">title 2 text</title>
   <summary>summary 2 text text text</summary>
  </entry>
 </feed>

【问题讨论】:

    标签: xpath selectnodes xmlnodelist


    【解决方案1】:

    考虑命名空间:

    XmlNamespaceManager mgr = new XmlNamespaceManager(XDoc.NameTable);
    mgr.AddNamespace("atom", "http://www.w3.org/2005/Atom");
    XmlNodeList xnList = xDoc.SelectNodes("//atom:entry", mgr);
    

    【讨论】:

    • 谢谢马丁!这正是问题所在。我以前从未见过命名空间管理器。
    【解决方案2】:

    这是最臭名昭著的关于 XPath 的常见问题解答——指的是默认命名空间中的元素名称。

    简答:搜索“XPath 默认命名空间”并理解问题。

    然后使用 XmlNamespaceManager 实例在前缀(例如 "x")和默认命名空间(在您的情况下为 "http://www.w3.org/2005/Atom")之间添加关联。

    最后,将 XPath 表达式中的任何 Name 替换为 x:Name

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-11
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多