Я хочу использовать следующий xpath
выражение:
/Msg[count('OrderStatus')[ 0]
но это не сработает, так как я получаю сообщение об ошибке: «Пространство имен
Требуется менеджер или XsltContext.
Это часто задаваемые вопросы.
В XPath имя без префикса всегда считается принадлежащим «без пространства имен».
Однако элементы, которые вы хотите выбрать, на самом деле находятся в "http://www.noventus.se/epix1/genericheader.xsd"
Пространство имен.
У вас есть два возможных способа написания выражения XPath :
- Используйте возможности языка хостинга для привязки префиксов ко всем различным пространствам имен, которым принадлежат имена из выражения. Вы не указали язык хостинга в этом конкретном случае, поэтому я не могу вам с этим помочь. Пример C # можно найти здесь .
Если вы связали префикс "xxx"
с пространством имен "http://www.noventus.se/epix1/genericheader.xsd"
и префикс "yyy"
с пространством имен "http://www.noventus.se/epix1/orderstatus.xsd"
, то ваше выражение может быть записано как:
/xxx:Msg[yyy:OrderStatus]
: 2: Если вы вообще не хотите использовать какие-либо префиксы, выражение XPath все равно можно создать, однако оно не будет слишком читабельным:
/*[local-name() = 'Msg' and *[local-name() = 'OrderStatus']]
Наконец, обратите внимание :
Чтобы проверить, есть ли у элемента x
дочерний элемент y
, нет необходимости проверять положительный count(y)
. Просто используйте : x[y]
Позиции Xpath основаны на 1 . Это означает, что NodeSetExpression[0]
никогда не выбирает узел. Вы хотите: NodeSetExpression[1]