C# Linq到XML:XML标记中的冒号问题
以下是检索内容标记中的值的代码:C# Linq到XML:XML标记中的冒号问题,c#,.net,linq-to-xml,C#,.net,Linq To Xml,以下是检索内容标记中的值的代码: var returnVerse = from item in xmlTreeVerse.Descendants("rss").Elements("channel").Elements("item") select new VerseModel { Verse = it
var returnVerse = from item in xmlTreeVerse.Descendants("rss").Elements("channel").Elements("item")
select new VerseModel
{
Verse = item.Element("content").Value,
Url = ""
};
以下是XML文件:
<?xml version="1.0" ?>
<rss version="2.0"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:admin="http://webns.net/mvcb/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>text</title>
<link>text</link>
<item>
<title>text</title>
<content:encoded>
Text
</content:encoded>
</item>
</channel>
</rss>
我无法查询content:encode,因为查询:运算符无效。请帮忙。代替
item.Element("content").Value
试试这个:
item.Element(XName.Get("encoded", "content")).Value
如果item.Element在此处返回null,则可能需要使用此选项:
item.Element(XName.Get("encoded", "http://purl.org/rss/1.0/modules/content/")).Value
而不是
item.Element("content").Value
试试这个:
item.Element(XName.Get("encoded", "content")).Value
如果item.Element在此处返回null,则可能需要使用此选项:
item.Element(XName.Get("encoded", "http://purl.org/rss/1.0/modules/content/")).Value
该冒号运算符是一个名称空间。您还需要使用名称空间进行查询。您可以使用如下名称空间:
XNamespace content = XNamespace.Get("http://purl.org/rss/1.0/modules/content/");
Verse = item.Element(content + "encoded").Value
该冒号运算符是一个名称空间。您还需要使用名称空间进行查询。您可以使用如下名称空间:
XNamespace content = XNamespace.Get("http://purl.org/rss/1.0/modules/content/");
Verse = item.Element(content + "encoded").Value
这对我有用,所以映射回内容:为这个问题编码
var ns = XNamespace.Get(@"http://purl.org/rss/1.0/modules/content/");
var xelems = xmlDoc.Descendants().ToList();
nodes.ForEach(n => n.Element(XName.Get("encoded", ns.NamespaceName)).Value);
var elems = from x in xelems
select x.Element(XName.Get("encoded", ns.NamespaceName)).Value
如果您想在公共RSS源上快速测试这一点,请在控制台应用程序或上运行此代码。这对我很有效,因此映射回内容:针对此问题编码
var ns = XNamespace.Get(@"http://purl.org/rss/1.0/modules/content/");
var xelems = xmlDoc.Descendants().ToList();
nodes.ForEach(n => n.Element(XName.Get("encoded", ns.NamespaceName)).Value);
var elems = from x in xelems
select x.Element(XName.Get("encoded", ns.NamespaceName)).Value
如果您想在公共RSS源上快速测试这一点,请在控制台应用程序或上运行此代码。是的,这不起作用。XName.Get的第二个参数是用于名称空间的。。好吧,交换一下我将编辑我的答案,这样做。是的,那不起作用。XName.Get的第二个参数是用于名称空间的。。好吧,交换一下我将编辑我的答案以执行此操作。