XSLT 中的 XSL 排序
Posted
技术标签:
【中文标题】XSLT 中的 XSL 排序【英文标题】:XSL sort in XSLT 【发布时间】:2020-10-01 22:02:13 【问题描述】:我有这个脚本来计算产品的一些值。它工作完美。如何使用order="descending"
或<xsl:sort>
XML
<ITEM>
<NAME>Lahůdková cibulka</NAME>
<CODE>89</CODE>
<AMOUNT>3</AMOUNT>
</ITEM>
<ITEM>
<NAME>Rané brambory 1 kg</NAME>
<CODE>4</CODE>
<AMOUNT>15</AMOUNT>
</ITEM>
<ITEM>
<NAME>Kapusta</NAME>
<CODE>93</CODE>
<AMOUNT>30</AMOUNT>
</ITEM>
<ITEM>
<NAME>Bílé zelí</NAME>
<CODE>20</CODE>
<AMOUNT>10</AMOUNT>
</ITEM>
我想按名称按字母顺序排序,如下所示:
首选 XML
<ITEM>
<NAME>Bílé zelí</NAME>
<CODE>20</CODE>
<AMOUNT>10</AMOUNT>
</ITEM>
<ITEM>
<NAME>Kapusta</NAME>
<CODE>93</CODE>
<AMOUNT>30</AMOUNT>
<ITEM>
<NAME>Lahůdková cibulka</NAME>
<CODE>89</CODE>
<AMOUNT>3</AMOUNT>
</ITEM>
<ITEM>
<NAME>Rané brambory 1 kg</NAME>
<CODE>4</CODE>
<AMOUNT>15</AMOUNT>
</ITEM>
我使用这个 XSLT。排序参数放在哪里?
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="no" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="itemkey" match="ITEM" use="concat(NAME, CODE)"/>
<xsl:template match="/ORDERS">
<xsl:copy>
<xsl:apply-templates select="descendant::ITEM[generate-id() = generate-id(key('itemkey', concat(NAME, CODE))[1])]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ITEM">
<xsl:copy>
<xsl:variable name="curr-group" select="key('itemkey', concat(NAME, CODE))" />
<xsl:copy-of select="CODE|NAME"/>
<AMOUNT>
<xsl:value-of select="sum($curr-group/AMOUNT)"/>
</AMOUNT>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
非常感谢
【问题讨论】:
【参考方案1】:将xsl:sort
用作xsl:apply-templates
的子代:
<xsl:apply-templates select="descendant::ITEM[generate-id() = generate-id(key('itemkey', concat(NAME, CODE))[1])]">
<xsl:sort select="NAME"/>
</xsl:apply-templates>
【讨论】:
谢谢。我试试这个,但之后有一些错误Warning: simplexml_load_file(): https://tisk.pesema.cz/zbozi/xml-patek.php:2: parser error : Extra content at the end of the document in /data/web/virtuals/76197/virtual/www/subdom/tisk/zbozi/zbozi_patek.php on line 3
Warning: simplexml_load_file(): <b>Warning</b>: DOMDocument::load(): Opening and ending tag mismatch: copy line in /data/web/virtuals/76197/virtual/www/subdom/tisk/zbozi/zbozi_patek.php on line 3
Warning: simplexml_load_file(): ^ in /data/web/virtuals/76197/virtual/www/subdom/tisk/zbozi/zbozi_patek.php on line 3
我无法解释这一点,您发布的代码以及我在答案中建议的上述更改在xsltfiddle.liberty-development.net/3Mvnt3k 上运行良好。以上是关于XSLT 中的 XSL 排序的主要内容,如果未能解决你的问题,请参考以下文章