gpt4 book ai didi

xslt - 如何使用 xsl 1.0 找到最小值和最大值?

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

文件_1.xml

<productlist>
<items>
<item>Pen</item>
<price>8</item>
</items>
<items>
<item>Pen</item>
<price>5</item>
</items>
<items>
<item>Pen</item>
<price>10</item>
</items>
<items>
<item>Bag</item>
<price>15</item>
</items>
<items>
<item>Bag</item>
<price>22</item>
</items>
<items>
<item>Bag</item>
<price>20</item>
</items>
</productlist>

文件_2.xml
<productlist>
<items>
<item>Pen</item>
</items>
<items>
<item>Bag</item>
</items>
</productlist>

需要使用 xsl 1.0 输出如下所示的最大值和最小值
<productlist>
<items>
<item>Pen</item>
<min>5</min>
<max>10</max>
</items>
<items>
<item>Bag</item>
<min>15</min>
<max>22</max>
</items>
</productlist>

最佳答案

排序,然后取第一个为最小值,最后一个为最大值:

<xsl:stylesheet 
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:param name="data-url" select="'file_1.xml'"/>
<xsl:variable name="data-doc" select="document($data-url)"/>

<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>

<xsl:key name="k1" match="items" use="item"/>

<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>

<xsl:template match="items">
<xsl:variable name="this" select="."/>
<xsl:copy>
<xsl:copy-of select="item"/>
<xsl:for-each select="$data-doc">
<xsl:for-each select="key('k1', $this/item)">
<xsl:sort select="price" data-type="number" order="ascending"/>
<xsl:if test="position() = 1">
<min>
<xsl:value-of select="price"/>
</min>
</xsl:if>
<xsl:if test="position() = last()">
<max>
<xsl:value-of select="price"/>
</max>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
</xsl:copy>
</xsl:template>

</xsl:stylesheet>

当我在输入文档上使用 Saxon 6.5.5 应用上述样式表时
<productlist>
<items>
<item>Pen</item>
</items>
<items>
<item>Bag</item>
</items>
</productlist>

另一个文件在哪里
<productlist>
<items>
<item>Pen</item>
<price>8</price>
</items>
<items>
<item>Pen</item>
<price>5</price>
</items>
<items>
<item>Pen</item>
<price>10</price>
</items>
<items>
<item>Bag</item>
<price>15</price>
</items>
<items>
<item>Bag</item>
<price>22</price>
</items>
<items>
<item>Bag</item>
<price>20</price>
</items>
</productlist>

我得到了想要的结果
<productlist>
<items>
<item>Pen</item>
<min>5</min>
<max>10</max>
</items>
<items>
<item>Bag</item>
<min>15</min>
<max>22</max>
</items>
</productlist>

关于xslt - 如何使用 xsl 1.0 找到最小值和最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12835990/

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