XML-запрос определенного узла из C # - PullRequest
0 голосов
/ 18 сентября 2009

Я написал фрагмент синтаксического анализа XML, который успешно работает при условии использования абсолютного пути.

Теперь мне нужно взять XMLNode в качестве аргумента и запустить xpath для этого.

Кто-нибудь знает, как это сделать?

Я пытался использовать относительные запросы XPath без какого-либо успеха !!

Должно ли это быть так сложно?

1 Ответ

2 голосов
/ 18 сентября 2009

Было бы полезно увидеть примеры выражений XPath, которые работают не так, как вы думаете. Вот несколько возможных причин (ошибки, которые я часто совершаю).

Предположим, XML-документ, такой как:

<A>
  <B>
    <C d='e'/>
  </B>
  <C/>
  <D xmlns="http://foo"/>
</A>
  • забыв удалить косую черту верхнего уровня ('/'), представляющую документ:

    document.XPathSelectElements("/A") // выбирает один узел A

    document.XPathSelectElements("//B") // выбирает один узел B

    document.XPathSelectElements("//C") // выбирает два узла C

но

aNode.XPathSelectElements("/B") // selects nothing (this looks for a rootNode with name B)
aNode.XPathSelectElements("B") // selects a B node

bNode.XPathSelectElements("//C") // selects TWO C nodes - all descendants of the root node
bNode.select(".//C") // selects one C node - all descendants of B
  • забыв пространства имен.

    aNode.XPathSelectElements("D") // ничего не выбирает (D находится в другом пространстве имен от A) aNode.XPathSelectElements("[local-name()='D' and namespace-uri()='http://foo']") // один D-узел

(Это часто проблема, когда корневой узел содержит пространство имен без префиксов - его легко пропустить)

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