我有一个xml,在其中我循环遍历每一个node
,并且我想检索xhtml
元素,我尝试了
foreach (XElement element in xdoc.Descendants(namespace))
{
var result = element.Descendants(namespace + "xhtml")
}
但是枚举总是返回empty
。
数据:
<namespace xmlns="http://www.find.org/schemas/">
<date>2015</date>
<xhtml:link xmlns:xhtml="xhtml:link" rel="alternate" />
<xhtml:link xmlns:xhtml="xhtml:link" rel="alternate" />
<xhtml:link xmlns:xhtml="xhtml:link" rel="alternate" />
</namespace>
发布于 2015-09-30 07:09:49
链接元素位于自己的名称空间中,在名称空间xhtml:link
中称为xhtml:link
。您需要使用它来选择元素。
// namespace of yout document
var ns = (XNamespace) "http://www.find.org/schemas";
// namespace of link elements
var nsXhtml = (XNamespace) "xhtml:link";
var result = xdoc.Root.Elements(nsXhtml+ "link");
result.Dump();
在xml中,您应该注意xmlns:
构造,这些构造可以位于顶部,也可以在元素上定义。使用no或错误的命名空间将找不到您的元素。
发布于 2015-09-30 07:52:08
尝尝这个
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string input =
"<namespace xmlns=\"http://www.find.org/schemas/\">" +
"<date>2015</date>" +
"<xhtml:link xmlns:xhtml=\"xhtml:link\" rel=\"alternate\" />" +
"<xhtml:link xmlns:xhtml=\"xhtml:link\" rel=\"alternate\" />" +
"<xhtml:link xmlns:xhtml=\"xhtml:link\" rel=\"alternate\" />" +
"</namespace>";
XDocument xdoc = XDocument.Parse(input);
List<XElement> links = xdoc.Descendants().Where(x => x.Name.LocalName == "link").ToList();
}
}
}
https://stackoverflow.com/questions/32859612
复制相似问题