2013-03-15 6 views
0

мне нужно написать выражение XPath для оценки, если значение ключа «ErrorCode» = -3025 в XML:Как получить значение ключа, используя выражение XPath

<?xml version="1.0" encoding="UTF-8"?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <esb:esb-header xmlns:esb="http://schemas.company.com/soa/esb"> 
    <esb:params> 
     <esb:param> 
     <esb:param-name>ErrorCode</esb:param-name> 
     <esb:param-value>-3025</esb:param-value> 
     </esb:param> 
    </esb:params> 
    </esb:esb-header> 
</soapenv:Envelope> 

Обратите внимание, что элементы имеют префикс.

ответ

0

XPath 2.0:

/*:Envelope/*:esb-header/*:params/*:param[*:param-name='ErrorCode' and *:param-value='-3025'] 

Для XPath 1.0, вы можете использовать local-name() вместо (гадость):

/*[local-name()='Envelope']/*[local-name()='esb-header']/*[local-name()='params']/*[local-name()='param'][*[local-name()='param-name']='ErrorCode' and *[local-name()='param-value']='-3025'] 

Если у вас есть способ объявить эти пространства имен, было бы намного легче 1.0 для использования префиксов вместо local-name().

Кроме того, вы можете обернуть весь путь в boolean() (XPath 1.0/2.0) или exists() (XPath 2.0) для возврата либо true или false.