gpt4 book ai didi

xml - 每个父节点在多个子节点上进行XSLT排序

转载 作者:行者123 更新时间:2023-12-04 12:55:02 25 4
gpt4 key购买 nike

我有以下XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<entries>
<entry>
<title>Entry 1</title>
<prices>
<price>10</price>
<price>50</price>
</prices>
</entry>
<entry>
<title>Entry 2</title>
<prices>
<price>200</price>
<price>300</price>
</prices>
</entry>
<entry>
<title>Entry 3</title>
<prices>
<price>70</price>
<price>500</price>
</prices>
</entry>
</entries>


每个元素都有多个价格标签,我想选择每个元素的最高价格,并将其与其余元素进行比较。

我的xslt是:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<body>
<table border="1">
<tr>
<th>Title</th>
<th>Highest Price</th>
</tr>
<xsl:for-each select="entries/entry">
<xsl:sort select="prices/price" order="descending" data-type="number"/>
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="prices/price"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>

</xsl:stylesheet>


没用它产生:

Title   Highest Price
Entry 2 200
Entry 3 70
Entry 1 10


它应该产生:

Title   Highest Price
Entry 3 500
Entry 2 300
Entry 1 50


请给我提意见。我必须使用XSLT1,所以我实际上不能这样做:

<xsl:sort select="max(prices/price)" order="descending" data-type="number"/>


...

最佳答案

我不确定这是否是一种特别优雅的方法,但是您可以遍历价格要素而不是进入要素

<xsl:for-each select="entries/entry/prices/price">
<xsl:sort select="." order="descending" data-type="number"/>


然后,您将需要一个xsl:if条件来检查每个价格元素是否该元素没有更高的价格

<xsl:if test="not(../price > current())">


这是完整的XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<table border="1">
<tr>
<th>Title</th>
<th>Highest Price</th>
</tr>
<xsl:for-each select="entries/entry/prices/price">
<xsl:sort select="." order="descending" data-type="number"/>
<xsl:if test="not(../price > current())">
<tr>
<td>
<xsl:value-of select="../../title"/>
</td>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>


应用于您的XML,输出如下

<html>
<body>
<table border="1">
<tr>
<th>Title</th>
<th>Highest Price</th>
</tr>
<tr>
<td>Entry 3</td>
<td>500</td>
</tr>
<tr>
<td>Entry 2</td>
<td>300</td>
</tr>
<tr>
<td>Entry 1</td>
<td>50</td>
</tr>
</table>
</body>
</html>

关于xml - 每个父节点在多个子节点上进行XSLT排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12422542/

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