文件_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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)