如何使用 XDocument.XPathEvaluate 处理空命名空间?

发布于 2024-09-05 14:23:49 字数 798 浏览 6 评论 0原文

我正在尝试使用 XDocument 和 XPathEvaluate 从 woot.com 提要中获取值。我可以很好地处理其他名称空间,但这个示例给我带来了问题。

     <rss xmlns:a10="http://www.w3.org/2005/Atom" version="2.0">
      <channel>    
        <category text="Comedy" xmlns="http://www.itunes.com/dtds/podcast-1.0.dtd">
</category> 
<!-- this is a problem node, notice 'xmlns=' --!>

所以我尝试这样做:

  XmlNamespaceManager man = new XmlNamespaceManager(nt);
    man.AddNamespace("ns", "http://www.w3.org/2000/xmlns/");
// i've also tried man.AddNamespace("ns", string.Empty);
    xDocument.Namespace = man;
    var val = xDocument.XPathEvaluate("/rss/channel/ns:category/@text", xDocument.Namespace);

val 始终为空。我正在使用 ns: 来自 VS 2010 XPath Navigator 插件的建议。关于如何处理这个问题有什么想法吗?

I'm trying to use XDocument and XPathEvaluate to get values from the woot.com feed. I'm handling other namespaces fine, but this example is giving me problems.

     <rss xmlns:a10="http://www.w3.org/2005/Atom" version="2.0">
      <channel>    
        <category text="Comedy" xmlns="http://www.itunes.com/dtds/podcast-1.0.dtd">
</category> 
<!-- this is a problem node, notice 'xmlns=' --!>

So I try this:

  XmlNamespaceManager man = new XmlNamespaceManager(nt);
    man.AddNamespace("ns", "http://www.w3.org/2000/xmlns/");
// i've also tried man.AddNamespace("ns", string.Empty);
    xDocument.Namespace = man;
    var val = xDocument.XPathEvaluate("/rss/channel/ns:category/@text", xDocument.Namespace);

val is always null. I'm using ns: from the suggestion from VS 2010 XPath Navigator plugin. Any thoughts on how to handle this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

清眉祭 2024-09-12 14:23:49

元素category位于命名空间http://www.itunes.com/dtds/podcast-1.0.dtd中。它不是一个空的命名空间。只是在输入 XML 中没有为其指定前缀。

man.AddNamespace("ns", "http://www.itunes.com/dtds/podcast-1.0.dtd");
...
xDocument.XPathEvaluate("/rss/channel/ns:category/@text", xDocument.Namespace);

The element category is in namespace http://www.itunes.com/dtds/podcast-1.0.dtd. It's not an empty namespace. It just isn't given a prefix in input XML.

man.AddNamespace("ns", "http://www.itunes.com/dtds/podcast-1.0.dtd");
...
xDocument.XPathEvaluate("/rss/channel/ns:category/@text", xDocument.Namespace);
孤独患者 2024-09-12 14:23:49
man.AddNamespace("ns", "http://www.w3.org/2000/xmlns/");

这是错误:您绑定到了错误的名称空间。

必须是:

man.AddNamespace("ns", "http://www.itunes.com/dtds/podcast-1.0.dtd"); 
man.AddNamespace("ns", "http://www.w3.org/2000/xmlns/");

Here is the error: you bind to the wrong namespace.

Must be:

man.AddNamespace("ns", "http://www.itunes.com/dtds/podcast-1.0.dtd"); 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文