gpt4 book ai didi

xml - 在xpath谓词中使用非重复值

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

我正在使用XSLT / Xpath 2.0,正在尝试编写一个xpath语句,该语句将允许我过滤XML中具有的某些重复节点集。这是一个示例XML:

<?xml version="1.0" encoding="utf-8"?>
<test>
<card>
<TimeCard>1234</TimeCard>
<tax>HST</tax>
<adjAmt>-112</adjAmt>
</card>
<card>
<TimeCard>1234</TimeCard>
<tax>GST</tax>
<adjAmt>-112</adjAmt>
</card>
<card>
<TimeCard>4321</TimeCard>
<tax>HST</tax>
<adjAmt>-50</adjAmt>
</card>
<card>
<TimeCard>4321</TimeCard>
<tax>GST</tax>
<adjAmt>-50</adjAmt>
</card>
<card>
<TimeCard>2121</TimeCard>
<tax>GST</tax>
<adjAmt>-55</adjAmt>
</card>
</test>


我需要一个返回“ adjAmt”但每个“ TimeCard”仅返回一次的xpath。当收取不同类型的税费时,我的主机系统会为“ adjAmt”创建重复的“ card”条目。在上面的示例中,我只用它返回-112,-50和-55;每个“时间卡”一个条目。

我曾尝试在时间卡元素的多个不同位置使用不重复值,但没有任何运气。

任何人对什么最有效有任何建议?

最佳答案

在XSLT 2或3中,可以使用for-each-group group-by通过card子元素对TimeCard元素进行分组,然后返回上下文节点的adjAmt子元素或其数字值,如下所示:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:mf="http://example.com/mf"
exclude-result-prefixes="xs mf"
version="3.0">

<xsl:output method="text"/>

<xsl:function name="mf:group-and-select-first" as="xs:decimal*">
<xsl:param name="cards" as="element(card)*"/>
<xsl:for-each-group select="$cards" group-by="TimeCard">
<xsl:sequence select="xs:decimal(adjAmt)"/>
</xsl:for-each-group>
</xsl:function>

<xsl:template match="/">
<xsl:value-of select="mf:group-and-select-first(test/card)"/>
</xsl:template>

</xsl:stylesheet>


https://xsltfiddle.liberty-development.net/bFDb2BP

当您的问题涉及在XPath谓词中使用该代码时,我已经将该分组代码包装到了函数中,该示例仅在 xsl:value-of select表达式的函数调用中调用了该函数,但是您当然也可以在内部使用该函数谓词(如果需要)。

关于xml - 在xpath谓词中使用非重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49615233/

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