Как использовать XPath-функции, такие, как exist () в C #? - PullRequest
2 голосов
/ 20 октября 2011

Я хочу прочитать некоторые узлы из XmlDocument-Object, используя SelectNodes-Method и XPathNavigator-Class.

Но C # не может оценить это (проверено с помощью XMLSpy) XPath-Expressen:

//LogicUnit[exists(Level[@val = 'R'])]/LogicLines[exists(LogicLine/DATAVIEW_SRC)]

Среда выполнения выдает XPAthException " Необходим диспетчер пространства имен или XsltContext. Этот запрос имеет префикс, переменную или пользовательскую функцию. "

Я не понимаю этого исключения, потому что мой XML-документ не использует никаких пространств имен, а также нет XSLT-документа. Это исключение всегда появляется, если я использую любую XPATH-функцию.

Ответы [ 3 ]

4 голосов
/ 20 октября 2011

Существует функция XPath (), определенная в XPath 2.0, но стандартный движок Microsoft XPath в .NET поддерживает только XPath 1.0. Если вам нужен движок XPath 2.0, работающий под .NET, попробуйте Saxon или XQSharp.

1 голос
/ 20 октября 2011

Причина в том, что он не может использовать функции без менеджера пространства имен, однако вам не нужно использовать функции, и ваш код использует эту функцию неправильно.вам не нужна функция Существует (), чтобы увидеть, если что-то существует, из того, что я вижу, вы используете

//LogicUnit[exists(Level[@val = 'R'])]

где вы имеете в виду

//LogicUnit[Level[@val = 'R']]
1 голос
/ 20 октября 2011

Использование // LogicUnit [count (Level [@val = 'R'])> 0].

...