在集成API期间,我尝试选择Tag的值与特定字符串匹配的第一个匹配项,并对所有其余字符串进行折扣。
以下是我所拥有的代码片段。
<Body>
<Envelope>
<GetCollectionResponse>
<GetCollectionResult>
<ErrorCode>0</ErrorCode>
<Collections>
<Collection>
<Service>Service One</Service>
<Day>Tuesday</Day>
<Date>18/07/2017</Date>
</Collection>
<Collection>
<Service>Service Two</Service>
<Day>Wednesday</Day>
<Date>19/07/2017</Date>
</Collection>
<Collection>
<Service>Service One</Service>
<Day>Thursday</Day>
<Date>20/07/2017</Date>
</Collection>
</Collections>
</GetCollectionResult>
</GetCollectionResponse>
</Envelope>
</Body>
理想情况下,我希望它能够获取第一次出现,即服务与“ Service One ”匹配 - 检索如下所示的信息,而不是第二次出现。
<Service>Service One</Service
<Day>Tuesday</Day>
<Date>18/07/2017</Date>
非常感谢任何帮助。
答案 0 :(得分:1)
理想情况下,我希望它能够获取第一个出现的情况 服务匹配'服务一'
由于您需要来自此Service
的多个节点,因此首先将其放在变量中可能会很方便,然后使用它来获取单个元素:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/Body">
<!-- "the first occurence whereby the Service matches 'Service One'" is: -->
<xsl:variable name="my-service" select="Envelope/GetCollectionResponse/GetCollectionResult/Collections/Collection[Service='Service One'][1]"/>
<!-- output -->
<xsl:copy-of select="$my-service/Service"/>
<xsl:copy-of select="$my-service/Day"/>
<xsl:copy-of select="$my-service/Date"/>
</xsl:template>
</xsl:stylesheet>
请注意,输出结构不是格式良好的XML(没有单个根元素)。
当然,在给定的示例中,您可以将其缩短为:
<xsl:template match="/Body">
<xsl:copy-of select="Envelope/GetCollectionResponse/GetCollectionResult/Collections/Collection[Service='Service One'][1]/*"/>
</xsl:template>
获取所选Service
的所有子元素。
答案 1 :(得分:0)
您可以使用XSLT的value-of
元素。它获得与XPath匹配的第一个元素。请参阅说明和示例:https://www.w3schools.com/xml/xsl_value_of.asp
您的XPath可能类似于获取当天的价值:
<xsl:value-of select="/Body/Envelope/GetCollectionResponse/GetCollectionResult/Collections/Collection[Service='Service One']/Day"/>
和您日期的等价物