Как выбрать узлы XML с пространствами имен XML из XmlDocument?
мой код пытается захватить данные из RSS-канала веб-сайта. Он прекрасно разбирает узлы, но при попытке захватить данные из node с двоеточием он сбой и дает ошибку "Требуется Namespace Manager или XsltContext. Этот запрос имеет префикс, переменную или определяемую пользователем функцию". Код показан ниже:
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 = "";
}
}
Я понимаю, что мне нужно определить пространство имен, но я не уверен, как это сделать. Помощь будет оценена.
Ответы
Ответ 1
Вы должны объявить префикс пространства dc
с использованием XmlNamespaceManager, прежде чем вы сможете использовать его в выражениях XPath:
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 = "";
}
}