Подтвердить что ты не робот

XmlNode.SelectSingleNode возвращает элемент за пределами текущего?

моя проблема такая. Скажем, у меня есть xml, как этот

<root>
  <child Name = "child1">
    <element1>Value1</element1>
    <element2>Value2</element2>
  </child>
  <child Name = "child2">
    <element1>Value1</element1>
    <element2>Value2</element2>
    <element3>Value3</element3>
  </child>
</root>

У меня есть метод, который получает как параметр XmlNode "node" . Допустим, что "node" имеет значение "child1". Тогда я пробую вот так:

node.SelectSingleNode( "//element3" );

Проблема заключается в том, что этот код возвращает element3 из "child2". Я хочу, если нет дочернего элемента "element3" из "node" для возврата null, поэтому я добавляю его вручную.
С наилучшими пожеланиями,
Iordand

4b9b3361

Ответ 1

Выражение XPath, которое у вас есть, не то, что вы хотите.

Замените это следующим образом:

node.SelectSingleNode( "element3" ); 

И вы получите результат, который вы ищете.

Ответ 2

"//" - глобальный поиск.

Что вам нужно сделать, так это получить список всех детей

XmlNodeList nodes = xmlDoc.SelectNodes("//Child");

прокрутите этот список и выполните

XmlNode node = nodes.SelectSingleNode("element3");

Это вернет null, если оно не существует, и будет проходить через каждый дочерний объект.

Ответ 3

Следующая работа идеально подходит, когда я хочу запустить xpath в указанном node.

XmlNodeList nodes = xmlDoc.SelectNodes(".//Child");

Ответ 4

проблема здесь в выражении XPath, которое вы используете, попробуйте его без "//". Например:

node.SelectSingleNode( "element3" );

Подробнее здесь.