XmlNode.SelectSingleNode возвращает элемент вне текущего? - PullRequest
18 голосов
/ 10 февраля 2010

моя проблема такая. Допустим, у меня есть 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 "узел". Допустим, «узел» имеет значение «child1». Затем я пытаюсь так:

node.SelectSingleNode( "//element3" );

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

Ответы [ 4 ]

21 голосов
/ 10 февраля 2010

Ваше выражение XPath - это не то, что вам нужно.

Замените его следующим:

node.SelectSingleNode( "element3" ); 

И вы получите желаемый результат.

8 голосов
/ 27 июня 2012

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

XmlNodeList nodes = xmlDoc.SelectNodes(".//Child");
8 голосов
/ 10 февраля 2010

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

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

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

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

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

Это вернет ноль, если его там нет, и будет проходить через каждого ребенка, смотрящего

3 голосов
/ 10 февраля 2010

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

node.SelectSingleNode( "element3" );

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

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