Относительный выбор XPath с использованием XmlNode (c #) - PullRequest
2 голосов
/ 13 мая 2010

Скажите, у меня есть следующий XML-файл:

<a>
  <b>
    <c></c>
  </b>
  <b>
    <c></c>
  </b>
</a>

var nodes = doc.SelectNodes("/a/b");

выберет два узла b.

Затем я зацикливаю эти два узла, например:

 foreach (XmlNode node in nodes) { }

Однако, когда я вызываю node.SelectNodes("/a/b/c");, он по-прежнему возвращает оба значения, а не только потомков. Можно ли выбрать узлы только по убыванию из текущего node?

Ответы [ 3 ]

8 голосов
/ 13 мая 2010

В цикле foreach вы уже знаете, что node - это /a/b в исходном документе, поэтому для получения его c дочерних элементов просто используйте относительный xpath:

node.SelectNodes("c")
2 голосов
/ 13 мая 2010

Вы можете использовать node.SelectSingleNode("C");

1 голос
/ 15 мая 2010
/a/b[1]/c

For intance получает список узлов всех дочерних элементов первого b, которые имеют тэг c.

Чтобы получить первый c как одноэлементный нодлист, используйте / a / b [1] / c [1]. / a / b / c [1] снова возвращает список узлов из нескольких узлов.

SelectSingleNode, вероятно, вводит в заблуждение, насколько я знаю, XPath всегда возвращает список узлов, который может содержать, необязательно, один узел (или даже быть пустым).

// c [1] просто выбирает первый c в документе.

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