Ответ 1
Выражение XPath, которое у вас есть, не то, что вы хотите.
Замените это следующим образом:
node.SelectSingleNode( "element3" );
И вы получите результат, который вы ищете.
моя проблема такая. Скажем, у меня есть 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
Выражение XPath, которое у вас есть, не то, что вы хотите.
Замените это следующим образом:
node.SelectSingleNode( "element3" );
И вы получите результат, который вы ищете.
"//" - глобальный поиск.
Что вам нужно сделать, так это получить список всех детей
XmlNodeList nodes = xmlDoc.SelectNodes("//Child");
прокрутите этот список и выполните
XmlNode node = nodes.SelectSingleNode("element3");
Это вернет null, если оно не существует, и будет проходить через каждый дочерний объект.
Следующая работа идеально подходит, когда я хочу запустить xpath в указанном node.
XmlNodeList nodes = xmlDoc.SelectNodes(".//Child");
проблема здесь в выражении XPath, которое вы используете, попробуйте его без "//". Например:
node.SelectSingleNode( "element3" );
Подробнее здесь.