如何从一个XmlDocument XML命名空间选择XML节点? [英] How to Select XML Nodes with XML Namespaces from an XmlDocument?

查看:275
本文介绍了如何从一个XmlDocument XML命名空间选择XML节点?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的code试图从一个网站的RSS源获取数据。它抓住节点罚款,但试图从一个节点用冒号抓取数据时,它崩溃并给出了错误命名空间管理器或XsltContext必要的。这个查询有preFIX,变量或用户定义函数。 在code如下所示:

my code attempts to grab data from the RSS feed of a website. It grabs the nodes fine, but when attempting to grab the data from a node with a colon, it crashes and gives the error "Namespace Manager or XsltContext needed. This query has a prefix, variable, or user-defined function." The code is shown below:

WebRequest request = WebRequest.Create("http://buypoe.com/external.php?type=RSS2&lastpost=true");
WebResponse response = request.GetResponse();

StringBuilder sb = new StringBuilder("");
System.IO.StreamReader rssStream = new System.IO.StreamReader(response.GetResponseStream(), System.Text.Encoding.GetEncoding("utf-8"));

XmlDocument rssDoc = new XmlDocument();
rssDoc.Load(rssStream);

XmlNodeList rssItems = rssDoc.SelectNodes("rss/channel/item");

for (int i = 0; i < 5; i++)
{
   XmlNode rssDetail;
   rssDetail = rssItems.Item(i).SelectSingleNode("dc:creator");

   if (rssDetail != null)
   {
      user = rssDetail.InnerText;
   }
   else
   {
      user = "";
   }
}

我知道我需要定义命名空间,但我不确定如何做到这一点。帮助将AP preciated。

I understand that I need to define the namespace, but am unsure how to do this. Help would be appreciated.

推荐答案

您必须使用声明 DC 命名空间preFIX的<一个href=\"http://msdn.microsoft.com/en-us/library/system.xml.xmlnamespacemanager.aspx\">XmlNamespaceManager然后才能在XPath的前pressions使用它:

You have to declare the dc namespace prefix using an XmlNamespaceManager before you can use it in XPath expressions:

XmlDocument rssDoc = new XmlDocument();
rssDoc.Load(rssStream);

XmlNamespaceManager nsmgr = new XmlNamespaceManager(rssDoc.NameTable);
nsmgr.AddNamespace("dc", "http://purl.org/dc/elements/1.1/");

XmlNodeList rssItems = rssDoc.SelectNodes("rss/channel/item");
for (int i = 0; i < 5; i++) {
    XmlNode rssDetail = rssItems[i].SelectSingleNode("dc:creator", nsmgr);
    if (rssDetail != null) {
        user = rssDetail.InnerText;
    } else {
        user = "";
    }
}

这篇关于如何从一个XmlDocument XML命名空间选择XML节点?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆