如何使用 Linq 检索后代
How to retrieve descendants using Linq
我有一个 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>
您的 link 元素位于其自己的命名空间中,在命名空间 xhtml:link
中称为 xhtml
。您需要将其用于 select 元素。
// 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 或错误的命名空间将找不到您的元素。
试试这个
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();
}
}
}
我有一个 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>
您的 link 元素位于其自己的命名空间中,在命名空间 xhtml:link
中称为 xhtml
。您需要将其用于 select 元素。
// 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 或错误的命名空间将找不到您的元素。
试试这个
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();
}
}
}