gpt4 book ai didi

xslt - XPath 通过命名空间从同级中获取值(value)

转载 作者:行者123 更新时间:2023-12-03 16:59:06 24 4
gpt4 key购买 nike

我有以下 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>有一个兄弟 <ReferenceType> “UTRN”

以下 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 中声明 namespace 并使用前缀。

例如,像这样声明它们(你可以选择任何你喜欢的前缀,只要命名空间 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> 的节点想要的值的 child 。

由于有很多方法可以查看 XML 树(并且因为我认为明确地命名。每一步。沿着。方式。是过度的),这样的事情也可以工作:

//uni:ReferenceType[. = 'UTRN']/../uni:引用值

或者

//uni:AlternativeReference[uni:ReferenceType = 'UTRN']/uni:ReferenceValue

关于xslt - XPath 通过命名空间从同级中获取值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52706402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com