我有以下xml文档:
<GetGeneralServiceRequestByReferenceValueResponse xmlns="http://www.caps-solutions.co.uk/webservices/connectors/731/servicerequest/messagetypes">
<GeneralServiceRequest xmlns="http://www.caps-solutions.co.uk/schema/uniform/731/servicerequest/sr/srtypes">
<ServiceRequestIdentification>
<ServiceRequestTechnicalKey>PG7ECIJBKFX00</ServiceRequestTechnicalKey>
<ReferenceValue>18/009969/S_SCBC</ReferenceValue>
<AlternativeReferences>
<AlternativeReference xmlns="http://www.caps-solutions.co.uk/schema/uniform/72b/common/uniformtypes">
<ReferenceValue>W44811182451</ReferenceValue>
<ReferenceType>UTRN</ReferenceType>
</AlternativeReference>
<AlternativeReference xmlns="http://www.caps-solutions.co.uk/schema/uniform/72b/common/uniformtypes">
<ReferenceValue>00482</ReferenceValue>
<ReferenceType>BAD</ReferenceType>
</AlternativeReference>
</AlternativeReferences>
<SiteID>JB</SiteID>
</ServiceRequestIdentification>
</GeneralServiceRequest>
</GetGeneralServiceRequestByReferenceValueResponse>
我需要选择同级
<ReferenceValue>
为“ UTRN”的<ReferenceType>
以下xpath是我最后一个
<ReferenceValue>
引用的<Alternative>
。/*[local-name()='GetGeneralServiceRequestByReferenceValueResponse']/*[local-name()='GeneralServiceRequest']/*[local-name()='ServiceRequestIdentification']/*[local-name()='AlternativeReferences']/*[local-name()='AlternativeReference']/*[local-name()='ReferenceValue']
我尝试将[]用于父AlternativeReference节点,然后使用ReferenceValue ='UTRN',但无法获得所需的输出。
最佳答案
不要使用local-name()
。在XSLT中声明名称空间并使用前缀。
例如,这样声明它们(您可以选择任何喜欢的前缀,只要名称空间URI匹配即可):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msg="http://www.caps-solutions.co.uk/webservices/connectors/731/servicerequest/messagetypes"
xmlns:sr="http://www.caps-solutions.co.uk/schema/uniform/731/servicerequest/sr/srtypes"
xmlns:uni="http://www.caps-solutions.co.uk/schema/uniform/72b/common/uniformtypes"
exclude-result-prefixes="msg sr uni"
>
和使用(出于可读性考虑而包装,但是XPath对空格不敏感,您可以将其以相同的方式包装在XSLT中):
/ msg:GetGeneralServiceRequestByReferenceValueResponse
/ sr:GeneralServiceRequest
/ sr:ServiceRequestIdentification
/ sr:替代参考
/ uni:AlternativeReference [uni:ReferenceType ='UTRN']
/ uni:参考值
在这里,
/uni:AlternativeReference[uni:ReferenceType = 'UTRN']
仅选择那些<AlternativeReference>
子代为所需值的<ReferenceType>
节点。由于查看XML树的方法有很多(而且我认为显式地命名,命名每个步骤都超出了它),所以类似的方法也可以工作:
// uni:ReferenceType [。 ='UTRN'] /../ uni:ReferenceValue
要么
// uni:AlternativeReference [uni:ReferenceType ='UTRN'] / uni:ReferenceValue