узел XmlNode.Метод selectsinglenode синтаксис поиска в узел В С#


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

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. Дело в том, что найденная фамилия всегда находится в первом узле в пределах myNodes. Я не хочу жестко кодировать точный путь для LastName, но вместо этого позволяю ему быть гибким относительно того, где внутри myNode он будет найден. Я бы так и подумал что использование метода SelectSingleNode в myNode ограничило бы поиск только содержимым xml myNode и не включало бы родительские узлы.

2 11

2 ответа:

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

XmlNode lastnameNode = myNode.SelectSingleNode(".//LastName");

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

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

myNode.SelectSingleNode(".LastName")