Я пытаюсь использовать цифровую подпись узла businessEntity. Я использую Xpath в моем transform для ссылки на этот узел.
Мое выражение Xpath:
ancestor-or-self::ns1:businessEntity[ @businessKey = 'uddi:testSignedProviderlastime' ] and not(ancestor-or-self::ns1:businessService) and not(ancestor-or-self::ds:Signature)
Я хочу удалить зависимость для префикса пространства имен ns1. Есть ли способ, которым я могу сделать это? Или есть способ, которым я могу указать URI пространства имен в своем выражении.
Я уже пытался заменить префикс пространства имен ns1 на , но получил ошибку при использовании префикса "". Любая помощь в изменении этого выражения приветствуется.
Спасибо, Соня
Ниже приведен XML, я также применяю это преобразование:
<soapenv:Body xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <ns1:save_business xmlns:ns1="urn:uddi-org:api_v3"> <ns1:authInfo>something </ns1:authInfo> <ns1:businessEntity businessKey="uddi:testSignedProviderlastime" xmlns:ns1="urn:uddi-org:api_v3"> <ns1:name>testSignedProviderlastime</ns1:name> <ns1:description>Not Provided</ns1:description> <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> <ds:SignedInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/> <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/> <ds:Reference URI="" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> <ds:Transforms xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/> <ds:Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> <ds:XPath xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ns1="urn:uddi-org:api_v3">ancestor-or-self::ns1:businessEntity[@businessKey='uddi:testSignedProviderlastime'] and not (ancestor-or-self::ns1:businessService) and not (ancestor-or-self::ds:Signature)</ds:XPath> </ds:Transform> </ds:Transforms> <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/> <ds:DigestValue xmlns:ds="http://www.w3.org/2000/09/xmldsig#">something</ds:DigestValue> </ds:Reference> </ds:SignedInfo> <ds:SignatureValue xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> something </ds:SignatureValue> <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> <ds:X509Data xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> <ds:X509Certificate xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> something </ds:X509Certificate> </ds:X509Data> <ds:KeyValue xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> <ds:RSAKeyValue xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> <ds:Modulus xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> something </ds:Modulus> <ds:Exponent xmlns:ds="http://www.w3.org/2000/09/xmldsig#">AQAB</ds:Exponent> </ds:RSAKeyValue> </ds:KeyValue> </ds:KeyInfo> </ds:Signature> </ns1:businessEntity> </ns1:save_business> </soapenv:Body>
Я думаю, вы хотите это:
ancestor-or-self::*[local-name() = 'businessEntity']
Или точнее:
ancestor-or-self::* [local-name() = 'businessEntity' and namespace-uri() = 'urn:uddi-org:api_v3']