Синтаксис XmlNode.SelectSingleNode для поиска в узле в C # - PullRequest
11 голосов
/ 05 августа 2011

Я хочу ограничить поиск дочернего узла текущим узлом, на котором я нахожусь. Например, у меня есть следующий код:

XmlNodeList myNodes = xmlDoc.DocumentElement.SelectNodes("//Books");
    foreach (XmlNode myNode in myNodes)
    {
         string lastName = "";
         XmlNode lastnameNode = myNode.SelectSingleNode("//LastName");
         if (lastnameNode != null)
         {
              lastName = lastnameNode.InnerText;
         }
    }

Я хочу, чтобы элемент LastName находился внутри текущего myNode внутри foreach. Происходит следующее: найденное LastName всегда с первого узла, в котором есть myNodes. Я не хочу жестко задавать точный путь для LastName, но вместо этого позволить ему быть гибким относительно того, где внутри myNode он будет найден. Я бы подумал, что использование метода SelectSingleNode в myNode ограничит поиск только содержимым myNode в формате xml и не будет включать родительские узлы.

Ответы [ 2 ]

26 голосов
/ 05 августа 2011

Ведущий // всегда начинается с корня документа;используйте .// для запуска на текущем узле и поиска только его потомков:

XmlNode lastnameNode = myNode.SelectSingleNode(".//LastName");
1 голос
/ 05 августа 2011

На самом деле проблема связана с XPath. Синтаксис XPath // означает, что вы выбираете узлы в документе из текущего узла, которые соответствуют выделению, независимо от того, где они находятся

, поэтому все, что вам нужно, это изменить его на

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