1

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

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

为了初始化提要并访问上述元素,我想找出默认命名空间。没有任何命名空间声明,它可以正常工作 (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);
4

1 回答 1

0

试试这样:

XNamespace ns = doc.Root.GetNamespaceOfPrefix("content");

content在您的示例中是prefix。可以在这篇w3schools 文章中找到对命名空间和前缀的很好解释

更新:

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

于 2013-02-19T12:26:50.013 回答