微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.net – 带命名空间的XML的XPath

我有一个带有各种命名空间的xml,我想使用它来查询.SelectNodes(string xPath)

我注意到的问题是,只要我拥有所有这些名称空间,xPath查询就不会返回任何内容.

>无论如何要告诉XmlDocument.SelectNodes忽略这些名称空间,只是给我正确的元素(我查询的元素似乎没有名称空间前缀)?
>如果有,有谁可以请我提供一个如何做的例子?我在查询节点之前/当我应该定义什么?

谢谢您的帮助.

更正:我仍然无法确定问题所在.这是我的xml:

<Feed xmlns="http://www.w3.org/2005/Atom"  xmlns:openSearch="http://a9.com/-/spec/opensearchRSS/1.0/"  xmlns:gf="http://schemas.google.com/finance/2007"  
      xmlns:gd="http://schemas.google.com/g/2005" >
  <id>http://finance.google.com/finance/Feeds/xyx@google.com/portfolios</id>
  <updated>2009-12-15T19:32:21.000Z</updated>
  <category scheme="http://schemas.google.com/g/2005#kind"  term="http://schemas.google.com/finance/2007#portfolio" />
  <title type="text" >Portfolio Feed</title>
  <link rel="alternate"  type="text/html"  href="http://finance.google.com/finance/portfolio?action=view" />
  <link rel="http://schemas.google.com/g/2005#Feed"  type="application/atom+xml"  href="http://finance.google.com/finance/Feeds/default/portfolios" />
  <link rel="http://schemas.google.com/g/2005#post"  type="application/atom+xml"  href="http://finance.google.com/finance/Feeds/default/portfolios" />
  <link rel="self"  type="application/atom+xml"  href="http://finance.google.com/finance/Feeds/default/portfolios" />
  <openSearch:totalResults>24</openSearch:totalResults>
  <openSearch:startIndex>1</openSearch:startIndex>
  <openSearch:itemsPerPage>24</openSearch:itemsPerPage>
  <entry>
    <id>http://finance.google.com/finance/Feeds/xyx@google.com/portfolios/2</id>
    <updated>2009-12-14T16:26:53.000Z</updated>
    <category scheme="http://schemas.google.com/g/2005#kind"  term="http://schemas.google.com/finance/2007#portfolio" />
    <title type="text" >Main</title>
    <link rel="self"  type="application/atom+xml"  href="http://finance.google.com/finance/Feeds/default/portfolios/2" />
    <link rel="edit"  type="application/atom+xml"  href="http://finance.google.com/finance/Feeds/default/portfolios/2" />
    <gd:FeedLink href="http://finance.google.com/finance/Feeds/xyx@google.com/portfolios/2/positions" />
    <gf:portfolioData currencyCode="USD"  gainPercentage="0.0"  return1w="0.0"  return1y="0.0"  return3m="0.0"  return3y="0.0"  return4w="0.0"  return5y="0.0"  returnOverall="0.0"  returnYTD="0.0" />
  </entry>
</Feed>

这是我的代码

XmlDocument xml = ExecuteRequest(url);

var xmlnsManager = new System.Xml.XmlNamespaceManager(xml.NaMetable);
        xmlnsManager.AddNamespace("xmlns:openSearch","http://a9.com/-/spec/opensearchRSS/1.0/");
        xmlnsManager.AddNamespace("xmlns:gf","http://schemas.google.com/finance/2007");
        xmlnsManager.AddNamespace("xmlns:gd","http://schemas.google.com/g/2005");

        var nodes = xml.SelectNodes("//Feed/entry",xmlnsManager);

我的节点数仍为0!任何的想法?

您需要创建命名空间管理器,设置要使用的所有命名空间及其前缀,然后在XPath中,您需要使用前缀.
var doc = new XmlDocument(); 
doc.Load("myfile.xml");

var xmlnsManager = new System.Xml.XmlNamespaceManager(doc.NaMetable);
xmlnsManager.AddNamespace("ns","http://example.org/schema.xsd");

doc.SelectNodes("//ns:MyElement",xmlnsManager);

警告:我没有编译此代码.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。