提问人:Sam 提问时间:10/10/2023 更新时间:10/10/2023 访问量:25
XSLT 1.0 - 查找属性的不同组合
XSLT 1.0 - Find distinct combination of attributes
问:
我正在使用 XSLT 1.0,我想找到多个属性的不同组合,特别是 DATE、RUN 和 REPORT 组合:
<?xml version="1.0" encoding="utf-8"?>
<Report>
<Rows>
<Row DATE="2020-02-01" RUN="1" REPORT="1" OTHER="there are other attributes" />
<Row DATE="2020-02-01" RUN="2" REPORT="1" OTHER="there are other attributes" />
<Row DATE="2020-02-02" RUN="1" REPORT="2" OTHER="there are other attributes" />
<Row DATE="2020-02-02" RUN="1" REPORT="2" OTHER="there are other attributes" />
<Row DATE="2020-02-03" RUN="2" REPORT="1" OTHER="there are other attributes" />
<Row DATE="2020-02-03" RUN="2" REPORT="1" OTHER="there are other attributes" />
<Row DATE="2020-02-03" RUN="1" REPORT="1" OTHER="there are other attributes" />
<Row DATE="2020-02-03" RUN="1" REPORT="1" OTHER="there are other attributes" />
</Rows>
</Report>
我需要得到的是更像这样的东西:
DATE="2020-02-01" RUN="1" REPORT="1"
DATE="2020-02-01" RUN="2" REPORT="1"
DATE="2020-02-02" RUN="1" REPORT="2"
DATE="2020-02-03" RUN="2" REPORT="1"
DATE="2020-02-03" RUN="1" REPORT="1"
过去,我曾成功地使用测试进行单属性分组,这只是我第一次需要跨多个列进行测试。
<xsl:if test="not(preceding-sibling::Row[@RUN = current()/@RUN])">
我猜我需要一个类似键的东西,将属性连接在一起
<xsl:key name="comboKey" match="/Report/Rows/Row" use="concat(@DATE,'++',@RUN,'++',@REPORT)"/>
但是我就是无法理解 XSLT 1.0 中的模板匹配(很抱歉,菜鸟问题,我对 XSLT 1.0 不太熟悉,但我学得很快。
非常感谢您的任何建议!
答:
1赞
y.arazim
10/10/2023
#1
您已正确标记您的问题,但与前面的兄弟姐妹进行比较不会尝试实现它。你应该这样做:Muenchian Grouping
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:key name="k1" match="Row" use="concat(@DATE, '|', @RUN, '|', @REPORT)" />
<xsl:template match="/Report">
<distinct>
<xsl:for-each select="Rows/Row[count(. | key('k1', concat(@DATE, '|', @RUN, '|', @REPORT))[1]) = 1]">
<Row DATE="{@DATE}" RUN="{@RUN}" REPORT="{@REPORT}"/>
</xsl:for-each>
</distinct>
</xsl:template>
</xsl:stylesheet>
有关该方法的解释(以及为什么您的方法不是一个好的方法),请阅读:http://www.jenitennison.com/xslt/grouping/muenchian.html
评论
0赞
Sam
10/11/2023
谢谢!这也是一本有趣的读物。
评论