Индексированный доступ к дочерним узлам XElement - PullRequest
4 голосов
/ 24 марта 2011

Я анализирую документ XML, используя LINQ to XML и XDocument. Есть ли способ для XElement / XContainer получить дочерний узел по индексу (в порядке документа)? Чтобы я мог получить n-й узел элемента?

Я знаю, что, вероятно, могу сделать это, получив все дочерние узлы этого элемента и преобразовав это IEnumerable в List, но это уже звучит так, как будто это добавит избыточные издержки (поскольку меня интересует только один дочерний узел).

Что-то я пропустил в документации?

Ответы [ 3 ]

5 голосов
/ 24 марта 2011

Нет, нет индексированного доступа к дочернему элементу с использованием XElement или XContainer.Если вам нужен индексированный доступ, у вас есть две опции.

Первый - вызвать метод Elements для XContainer (который возвращает IEnumerable<T>из XElement экземпляров в порядке документа), а затем используйте метод расширения Skip , чтобы пропустить элементы для достижения определенного дочернего элемента.

Если вы хотите часто получать доступ к дочерним элементампо индексу, тогда вы должны поместить их в IList<T> (который имеет индексированный доступ), что достаточно просто при использовании метода расширения ToList :

IList<XElement> indexedElements = element.Elements().ToList();
4 голосов
/ 24 марта 2011

как насчет операторов Skip (n) .Take (1)

2 голосов
/ 24 марта 2011

Может быть, директива Take (topN) LINQ может помочь?Я делаю предположение, основываясь на некотором опыте, связанном с SQL - вы не можете получить строку напрямую, но можете взять верхние n элементов

Это может помочь, если ваш список огромен, и вы не включаете последние элементы.

...