我有一个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>
答案 0 :(得分:1)
您的链接元素位于名称空间xhtml
中名为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或错误的命名空间将无法找到您的元素。
答案 1 :(得分:0)
试试这个
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();
}
}
}