0
鑑於這種結構:XSLT 2.0前值中的for-each組
<ROOT>
<MYROW>
<CATEGORYNAME>first</CATEGORYNAME>
<DATA>10</DATA>
</MYROW>
<MYROW>
<CATEGORYNAME>second</CATEGORYNAME>
<DATA>20</DATA>
</MYROW>
<MYROW>
<CATEGORYNAME>second</CATEGORYNAME>
<DATA>30</DATA>
</MYROW>
<MYROW>
<CATEGORYNAME>first</CATEGORYNAME>
<DATA>100</DATA>
</MYROW>
</ROOT>
我做的這種轉變:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="ROOT">
<Worksheet>
<xsl:for-each-group select="MYROW" group-by="CATEGORYNAME">
<ROW>
<CELL>
<DATA>
<xsl:value-of select="current-grouping-key()"/>
</DATA>
</CELL>
</ROW>
<xsl:apply-templates select="current-group()"/>
</xsl:for-each-group>
</Worksheet>
</xsl:template>
<xsl:template match="MYROW">
<ROW>
<CELL>
<xsl:value-of select="DATA"/>
</CELL>
</ROW>
</xsl:template>
</xsl:transform>
我想比較「DATA 「與之前在團隊中的價值。我不能設法得到以前的價值。我想:
<xsl:value-of select="preceding-sibling::node()/DATA"/>
這將前面的所有兄弟節點的原始XML,而不僅僅是在當前組。
基本上我想知道是否有一種方法可以在group-by序列中使用xpath。
預期輸出:
<Worksheet>
<ROW>
<CELL>
<DATA>first</DATA>
</CELL>
</ROW>
<ROW>
<CELL>
<DATA color = "black">10</DATA>
</CELL>
</ROW>
<ROW>
<CELL>
<DATA color = "blue">100</DATA>
</CELL>
</ROW>
<ROW>
<CELL>
<DATA color = "red">5</DATA>
</CELL>
</ROW>
<ROW>
<CELL>
<DATA>second</DATA>
</CELL>
</ROW>
<ROW>
<CELL>
<DATA color = "black">20</DATA>
</CELL>
</ROW>
<ROW>
<CELL>
<DATA color = "blue">30</DATA>
</CELL>
</ROW>
</Worksheet>
你可以發佈你想要達到的結果嗎?目前還不清楚您是要在原始輸入XML中將「DATA」元素與其之前的「DATA」元素進行比較還是與前一個組成員進行比較。目前還不清楚你想要比較什麼,也許你想用'DATA'嵌套分組?例如, –
,對於我的第一個名爲「first」的組,我的值依次爲10和100。我想知道100是否大於它以前的值10。爲了給你更多的上下文,我的數據值是按照時間順序排列的,這就是爲什麼我想進行比較,但是在每個組中。 – PDM
所以我想比較一下預先的組員。 – PDM