Проект codebyOS

Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

В чём разница между методом Nodes и Descendants?

В этой статье хочу рассказать про метод Descendants и показать его отличие от метода Nodes при работе с xml узлами типа XElement.

Метод Nodes

И так предположим, что у нас есть xml файл, который например, содержит следующую структуру:

 

И нам нужно получить значение элемента name содержащегося в каждом узле friend. Для решения данной задачи воспользуемся методом Nodes.

В результате выполнения данного цикла происходит выброс исключения:

Это происходит, потому что в приведенном примере мы не учли, что тип xml узла может быть не только XElement, но и XComment, как например в данном случаи.

Чтобы это исправить мы можем поступить, например следующим образом:

XNode — это всего лишь абстрактная концепция представление узла, которым может являться: комментарий (XComment), элемент (XElement), тип документа или текстовый узел (XText) в xml дереве.


Проект codebyOS

Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

Так как тип xml узла каждый раз может быть разным, то для того чтобы получить все узлы только типа XElement необходимо в теле цикла добавить проверку:

После того как мы произвели отбор по типу, необходимо выполнить операцию явного приведения, чтобы получить доступ к членам класса XElement.

Либо для решения обоих задач можно воспользоваться операторами: is или as.

Метод Descendants

Кроме метода Nodes в сборке System.Xml.Linq так же содержится метод Descendants, который позволяет нам избавиться от всех выше описанных возникающих «проблем» одним разом. Так как в результате выполнения данного метода мы всегда получаем коллекцию элементов типа XElement, например:

На этом всё если есть какие-то вопросы, то оставляйте их в комментариях.

Читайте также:



Похожие темы

Чтение Xml файла с выводом данных в DataGridView в... Как выполнить чтение xml файла с выводом данных в DataGridView? В этой статье хочу показать на простом примере, как можно выполнить чтение xml файла ...
Как переименовать домен виртуальной машины KVM (VM... Как переименовать виртуальную машину на основе KVM с foo на bar, используя опцию командной строки virsh в Linux? Существует два способа переименования...
У меня не открывается xml файл, что делать?... Что делать, если не удается открыть xml файл? В этой статье хотелось бы рассмотреть некоторые причины, из-за которых очень часто не удается открыть x...
Как найти xml элемент по его атрибуту в XML файле?... Как найти xml элемент по его атрибуту? Из этой статьи Вы узнаете, как найти xml элемент по его атрибуту с помощью простого LINQ запроса. И так для на...
Протокол XML-RPC для вызова удаленных процедур Wor... Вызов удаленной процедуры WordPress с помощью протокола XML-RPC XML-RPC это протокол вызова удаленных процедур, который использует формат XML для код...