XPath выбрать узел с правильного уровня - PullRequest
1 голос
/ 30 октября 2011

У меня есть следующий (упрощенный) XML ...

<root type="object">
    <user type="object">
        <id type="number">123</id>
    </user>
    <id type="number">456</id>
</root>

Я использую следующее для получения идентификатора из корневого элемента

    Dim Navigator = Document.CreateNavigator()
    Dim ns = New XmlNamespaceManager(Navigator.NameTable)
    Dim nodes = Navigator.Select("/root", ns)
    Dim Node = nodes.Current
    Element = Node.SelectSingleNode("/id")
    Dim Id = Element.Value

В этомВ этом случае Element.Value содержит идентификатор пользователя

Какой правильный селектор для корневого идентификатора?

Ответы [ 2 ]

2 голосов
/ 30 октября 2011

Почему бы вам не выбрать узел root-id напрямую?

Navigator.Select("/root/id", ns)
1 голос
/ 30 октября 2011

Ваша проблема здесь :

Element = Node.SelectSingleNode("/id") 

Вы указали, что должно вычисляться абсолютное выражение /id.

Это абсолютное выражение XPath (начинается с /), которое выбирает верхний элемент XML-документа, если его имя "id". В этом конкретном случае имя верхнего элемента - "root" (не "id"), поэтому выражение XPath ничего не выбирает.

Решение : Либо:

  1. Используйте относительное выражение : Element = Node.SelectSingleNode("id")

  2. Выберите нужный элемент с одним выражением XPath :

.

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