Разница между NodesAfterSelf () и ElementsAfterSelf () - PullRequest
1 голос
/ 20 июня 2010

Эти два метода LINQ to XML, кажется, делают то же самое. Хотелось бы узнать разницу между ними.

var xdoc = XDocument.Load(filename);

xdoc.Root.FirstNode.ElementsAfterSelf();
xdoc.Root.FirstNode.NodesAfterSelf();

Оба метода возврата возвращают

<Title Name="Cooking with Computers: Surreptitious Balance Sheets" Price="11.9500">
  <Authors>
    <Author Name="O'Leary, O'Leary" />
    <Author Name="MacFeather, MacFeather" />
  </Authors>
</Title>  
<Title Name="You Can Combat Computer Stress!" Price="2.9900">
  <Authors>
    <Author Name="Green, Green" />
  </Authors>
</Title>  

Вот XML

<PubsDatabase>
  <Title Name="The Busy Executive's Database Guide" Price="19.9900">
    <Authors>
      <Author Name="Green, Green" />
      <Author Name="Bennet, Bennet" />
    </Authors>
  </Title>
  <Title Name="Cooking with Computers: Surreptitious Balance Sheets" Price="11.9500">
    <Authors>
      <Author Name="O'Leary, O'Leary" />
      <Author Name="MacFeather, MacFeather" />
    </Authors>
  </Title>
  <Title Name="You Can Combat Computer Stress!" Price="2.9900">
    <Authors>
      <Author Name="Green, Green" />
    </Authors>
  </Title>
</PubsDatabase>

1 Ответ

1 голос
/ 20 июня 2010

Узлы будут возвращать такие вещи, как текстовые узлы, а также элементы, в основном. Например:

using System;
using System.Xml;
using System.Xml.Linq;

namespace Test
{
    class Test
    {
        static void Main()
        {
            XElement element = new XElement("root",
                new XElement("child1", "text1"),
                "text directly in root",
                new XElement("child2"),
                new XElement("child3", "text3"));

            XElement child1 = element.Element("child1");
            var nodes = child1.NodesAfterSelf();
            foreach (var node in nodes)
            {
                Console.WriteLine(node.NodeType);
            }
        }
    }
}

Это печатает

Text
Element
Element

Несколько замечаний:

  • Это не включает узлы внутри самого
  • Это не повторяется (не показывает текстовый узел child3)
  • Это включает непосредственно после него текстовый узел, чего не было бы ElementsAfterSelf.

В качестве примечания, атрибуты не считаются узлами в LINQ to XML. Из документации XNode:

Представляет абстрактную концепцию узел (один из: элемент, комментарий, тип документа, инструкция по обработке, или текстовый узел) в дереве XML.

В отличие от большинства API XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...