C# XElement Nodes()与Elements()有什么区别?
文件说:C# XElement Nodes()与Elements()有什么区别?,c#,.net,xelement,C#,.net,Xelement,文件说: XContainer.Nodes方法() 按文档顺序返回此元素或文档的子节点的集合 评论 请注意,内容不包括属性。在LINQ to XML中,属性不被认为是树的节点。它们是与元素关联的名称/值对 XContainer.Elements方法() 按文档顺序返回此元素或文档的子元素的集合 看起来Nodes()有一个限制,但为什么它会存在呢?使用Nodes()有任何可能的原因或优点吗?原因很简单:XNode是所有xml“部分”的基本(抽象)类,XElement只是其中一个部分(因此XEl
XContainer.Nodes方法() 按文档顺序返回此元素或文档的子节点的集合 评论 请注意,内容不包括属性。在LINQ to XML中,属性不被认为是树的节点。它们是与元素关联的名称/值对 XContainer.Elements方法() 按文档顺序返回此元素或文档的子元素的集合
看起来Nodes()有一个限制,但为什么它会存在呢?使用Nodes()有任何可能的原因或优点吗?原因很简单:
XNode
是所有xml“部分”的基本(抽象)类,XElement
只是其中一个部分(因此XElement
是XNode
的子类)。考虑这个代码:
XDocument doc = XDocument.Parse("<root><el1 />some text<!-- comment --></root>");
foreach (var node in doc.Root.Nodes()) {
Console.WriteLine(node);
}
foreach (var element in doc.Root.Elements()) {
Console.WriteLine(element);
}
XDocument doc=XDocument.Parse(“一些文本”);
foreach(doc.Root.Nodes()中的var节点){
控制台写入线(节点);
}
foreach(doc.Root.Elements()中的var元素){
控制台写入线(元素);
}
第二个循环(通过元素()
)将只返回一项:
然而,第一个循环还将返回文本节点(some text
)和注释节点(
),因此您可以看到区别
您可以查看XNode类的其他子类中有哪些子类。不是节点“有限制”。节点是构建大多数其他事物(包括元素)的基本构造块 XML文档表示为层次结构(树),节点用于表示层次结构的基本结构
如果我们考虑以下XML文档:
<root>
<element>
<child>
Text
</child>
</element>
<!-- comment -->
<element>
<child>
Text
<child>
</element>
</root>
正文
正文
显然,整个文档不能表示为元素,因为“子”元素中的注释和文本不是元素。相反,它被表示为节点的层次结构
在本文档中,有5个元素(根元素、两个“元素”元素和两个“子”元素)。所有这些都是节点,但还有3个其他节点:“子”元素中的文本和注释
说节点有“限制”是因为它们没有属性,这是误导性的。只有元素有属性,元素是节点!但是还有其他节点(例如注释)不能具有属性。因此,并非所有类型的节点都具有属性
在编码术语中,节点是构建更高级别类型(如元素)的基类。如果要枚举文档中的元素,那么使用
XContainer.elements()
是一个很好的快捷方式,但也可以使用XContainer.Nodes()
获取所有节点,包括元素和其他内容。(您可以检查节点的类型,以查看是否有元素节点、文本节点或其他类型;如果是元素,则可以向上转换它)。文本节点不是元素。注释不是元素。处理指令不是元素。您需要节点()
才能访问它们。