Linq to XML:获取rss的默认命名空间

时间:2013-02-19 12:15:37

标签: c# xml linq-to-xml

我用这种方式调用几个类中的方法:

GetResult(XElement item, XNamespace ns) {
    item.Element(ns + "title").Value;
}

为了初始化feed并访问上面提到的元素,我想找出默认的命名空间。没有任何名称空间声明它工作正常(item.Element(“title”)。Value)并返回元素的值。

那我怎样才能找到正确的命名空间?方法root.GetDefaultNamespace()的结果以某种方式为空......

<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
    <channel>...</channel>
</rss>

//修改

好的,到目前为止我的代码:

    XDocument thisFeed = XDocument.Load(@"http://www.spiegel.de/schlagzeilen/tops/index.rss");
    XElement root = thisFeed.Root;
    XNamespace ns = root.GetNamespaceOfPrefix("content");
    //result:
    Console.WriteLine("DefaultNamespace: " + root.GetDefaultNamespace());
    //result: http://purl.org/rss/1.0/modules/content/
    Console.WriteLine("GetNamespaceOfPrefix('content'): " + ns);
    //works
    Console.WriteLine("Result: " + root.Element("channel").Element("title").Value);
    //Doesn't work
    Console.WriteLine("Result: " + root.Element(ns + "channel").Element(ns + "title").Value);

1 个答案:

答案 0 :(得分:0)

试试这样:

XNamespace ns = doc.Root.GetNamespaceOfPrefix("content");
您的示例中的

content前缀。可以在 w3schools article

找到名称空间和前缀的详细说明

<强>更新

在该文档中没有定义默认名称空间,只有带前缀的元素的名称空间,没有名称空间的其他元素。我发现只有元素<content:encoded>使用前缀,对于该元素,您需要使用ns