如何从 XmlDocument 中选择具有 XML 命名空间的 XML 节点? [英] How to Select XML Nodes with XML Namespaces from an XmlDocument?
问题描述
我的代码尝试从网站的 RSS 提要中获取数据.它可以很好地抓取节点,但是当尝试从带有冒号的节点抓取数据时,它会崩溃并给出错误需要命名空间管理器或 XsltContext.此查询具有前缀、变量或用户定义的函数".代码如下所示:
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 = "";
}
}
我知道我需要定义命名空间,但不确定如何执行此操作.将不胜感激.
I understand that I need to define the namespace, but am unsure how to do this. Help would be appreciated.
推荐答案
您必须使用 XmlNamespaceManager 才能在 XPath 表达式中使用它:
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屋!