Extensions.DescendantNodes<T>(IEnumerable<T>) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
返回源集合中每个文档和元素的子代节点的集合。
public:
generic <typename T>
where T : System::Xml::Linq::XContainer[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<System::Xml::Linq::XNode ^> ^ DescendantNodes(System::Collections::Generic::IEnumerable<T> ^ source);
public static System.Collections.Generic.IEnumerable<System.Xml.Linq.XNode> DescendantNodes<T> (this System.Collections.Generic.IEnumerable<T> source) where T : System.Xml.Linq.XContainer;
public static System.Collections.Generic.IEnumerable<System.Xml.Linq.XNode> DescendantNodes<T> (this System.Collections.Generic.IEnumerable<T?> source) where T : System.Xml.Linq.XContainer;
static member DescendantNodes : seq<'T (requires 'T :> System.Xml.Linq.XContainer)> -> seq<System.Xml.Linq.XNode> (requires 'T :> System.Xml.Linq.XContainer)
<Extension()>
Public Function DescendantNodes(Of T As XContainer) (source As IEnumerable(Of T)) As IEnumerable(Of XNode)
类型参数
- T
source
中对象的类型,被约束为 XContainer。
参数
- source
- IEnumerable<T>
一个包含源集合的 IEnumerable<T> 的 XContainer。
返回
源集合中每个文档和元素的子代节点的 IEnumerable<T> 的 XNode。
示例
以下示例检索两个元素的集合,然后检索源集合中每个元素的所有子代节点的集合。 请注意, 元素的 GrandChild
属性不会显示为节点。
XElement xmlTree = XElement.Parse(
@"<Root>
<Child>aaa<GrandChild anAttribute='xyz'>Text</GrandChild>
<!--a comment-->
<?xml-stylesheet type='text/xsl' href='test.xsl'?>
</Child>
<Child>ccc<GrandChild>Text</GrandChild>ddd</Child>
</Root>");
IEnumerable<XNode> nodes =
from node in xmlTree.Elements("Child").DescendantNodes()
select node;
foreach (XNode node in nodes)
{
switch (node.NodeType)
{
case XmlNodeType.Element:
Console.WriteLine("Element: {0}", ((XElement)node).Name);
break;
case XmlNodeType.Text:
Console.WriteLine("Text: {0}", ((XText)node).Value);
break;
case XmlNodeType.Comment:
Console.WriteLine("Comment: {0}", ((XComment)node).Value);
break;
case XmlNodeType.ProcessingInstruction:
Console.WriteLine("PI: {0}", ((XProcessingInstruction)node).Data);
break;
}
}
Dim xmlTree As XElement = _
<Root>
<Child>aaa<GrandChild anAttribute='xyz'>Text</GrandChild>
<!--a comment-->
<?xml-stylesheet type='text/xsl' href='test.xsl'?>
</Child>
<Child>ccc<GrandChild>Text</GrandChild>ddd</Child>
</Root>
Dim nodes As IEnumerable(Of XNode) = _
From node In xmlTree.<Child>.DescendantNodes _
Select node
For Each node As XNode In nodes
Select Case node.NodeType
Case XmlNodeType.Element
Console.WriteLine("Element: {0}", DirectCast(node, XElement).Name)
Case XmlNodeType.Text
Console.WriteLine("Text: {0}", DirectCast(node, XText).Value)
Case XmlNodeType.Comment
Console.WriteLine("Comment: {0}", DirectCast(node, XComment).Value)
Case XmlNodeType.ProcessingInstruction
Console.WriteLine("PI: {0}", DirectCast(node, XProcessingInstruction).Data)
End Select
Next
该示例产生下面的输出:
Text: aaa
Element: GrandChild
Text: Text
Comment: a comment
PI: type='text/xsl' href='test.xsl'
Text: ccc
Element: GrandChild
Text: Text
Text: ddd
下面是相同的示例,但在本例中,XML 位于 命名空间中。 有关详细信息,请参阅 使用 XML 命名空间。
XNamespace aw = "http://www.adventure-works.com";
XElement xmlTree = XElement.Parse(
@"<Root xmlns='http://www.adventure-works.com'>
<Child>aaa<GrandChild anAttribute='xyz'>Text</GrandChild>
<!--a comment-->
<?xml-stylesheet type='text/xsl' href='test.xsl'?>
</Child>
<Child>ccc<GrandChild>Text</GrandChild>ddd</Child>
</Root>");
IEnumerable<XNode> nodes =
from node in xmlTree.Elements(aw + "Child").DescendantNodes()
select node;
foreach (XNode node in nodes)
{
switch (node.NodeType)
{
case XmlNodeType.Element:
Console.WriteLine("Element: {0}", ((XElement)node).Name);
break;
case XmlNodeType.Text:
Console.WriteLine("Text: {0}", ((XText)node).Value);
break;
case XmlNodeType.Comment:
Console.WriteLine("Comment: {0}", ((XComment)node).Value);
break;
case XmlNodeType.ProcessingInstruction:
Console.WriteLine("PI: {0}", ((XProcessingInstruction)node).Data);
break;
}
}
Imports <xmlns="http://www.adventure-works.com">
Module Module1
Sub Main()
Dim xmlTree As XElement = _
<Root>
<Child>aaa<GrandChild anAttribute='xyz'>Text</GrandChild>
<!--a comment-->
<?xml-stylesheet type='text/xsl' href='test.xsl'?>
</Child>
<Child>ccc<GrandChild>Text</GrandChild>ddd</Child>
</Root>
Dim nodes As IEnumerable(Of XNode) = _
From node In xmlTree.<Child>.DescendantNodes _
Select node
For Each node As XNode In nodes
Select Case node.NodeType
Case XmlNodeType.Element
Console.WriteLine("Element: {0}", DirectCast(node, XElement).Name)
Case XmlNodeType.Text
Console.WriteLine("Text: {0}", DirectCast(node, XText).Value)
Case XmlNodeType.Comment
Console.WriteLine("Comment: {0}", DirectCast(node, XComment).Value)
Case XmlNodeType.ProcessingInstruction
Console.WriteLine("PI: {0}", DirectCast(node, XProcessingInstruction).Data)
End Select
Next
End Sub
End Module
该示例产生下面的输出:
Text: aaa
Element: {http://www.adventure-works.com}GrandChild
Text: Text
Comment: a comment
PI: type='text/xsl' href='test.xsl'
Text: ccc
Element: {http://www.adventure-works.com}GrandChild
Text: Text
Text: ddd
注解
此轴扩展方法用于 XDocument 和 XElement 对象。 这两种类型都派生自 XContainer,因此此方法对IEnumerable<T>XContainer包含源集合的 执行操作。
尽管 Visual Basic 具有用于子代元素的集成 XML 轴,但后代节点没有集成轴,因此 Visual Basic 用户必须显式使用此轴方法。
此方法使用延迟执行。