问题解析RSS xml
问题描述:
我有一个问题,使用Linq XML分析以下XML。我正在做的是让元素检查是否它是我想要的,然后移动到下一个。我很确定它与xmlns有关,但我需要这个代码来处理这个风格和正常风格的RSS提要(没有xmlns)。有任何想法吗?问题解析RSS xml
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">
<channel rdf:about="http://someurl.com">
<title>sometitle</title>
XElement currentLocation = startElementParameter;
foreach (string x in ("channel\\Title").Split('\\'))
{
if (condition1 == false)
{
continue;
}
else if (condition2 == false)
{
break;
}
else
{
// This is returning null.
currentLocation = currentLocation.Element(x);
}
}
谢谢!
编辑:XML没有粘贴正确。
答
XElement.Element方法需要一个XName。
您正在传递一个字符串,这意味着它正在被隐式转换为一个没有附加名称空间的XName。
换句话说,你XElement.Element()
呼叫请求命名channel
没有命名空间的元素,但在你的示例XML的channel
元素都在http://purl.org/rss/1.0/
命名空间由于对<rdf:RDF>
的xmlns="http://purl.org/rss/1.0/"
属性。
要正确拉出通道元素时命名空间是存在,你可以这样做:
var ns = XNamespace.Get("http://purl.org/rss/1.0/");
currentLocation = currentLocation.Element(ns + "channel");
使用上的XNamespace +运算符和一个字符串创建了一个附加的命名空间中的XName的。
要支持这个文档的两种样式,请检查XDocument.Root
是否有一个具有预期URI值的名称空间。您可以使用XElement.GetDefaultNamespace()。