我需要表行应按照代码值的顺序获取
输入我有的xml:
<Group>
<Maps>
<Map>
<Code>20000</Code>
</Map>
<Map>
<Code>30000</Code>
</Map>
</Maps>
<Details>
<Detail>
<Code>30000</Code>
<Description>Benefit</Description>
</Detail>
<Detail>
<Code>20000</Code>
<Description>Non-Benefit</Description>
</Detail>
</Details>
</Group>
XSL 我已经使用变量尝试了以下操作:
<xsl:template match="Group">
<xsl:variable name="MapCode" select="Maps/Map/Code"/>
<row>
<entry>Code</entry>
<xsl:for-each select="Maps/Map">
<entry>
<p>
<xsl:value-of select="Code"/>
</p>
</entry>
</xsl:for-each>
</row>
<row>
<entry>Level</entry>
<xsl:for-each select="Details/Detail[Code=$MapCode]">
<entry>
<p>
<xsl:value-of select="Description"/>
</p>
</entry>
</xsl:for-each>
</row>
</xsl:template>
我得到的实际输出:
<row>
<entry>Code</entry>
<entry>
<p>20000</p>
</entry>
<entry>
<p>30000</p>
</entry>
</row>
<row>
<entry>Level</entry>
<entry>
<p>Benefit</p>
</entry>
<entry>
<p>Non-Benefit</p>
</entry>
</row>
预期输出应该是:
<row>
<entry>Code</entry>
<entry>
<p>20000</p>
</entry>
<entry>
<p>30000</p>
</entry>
</row>
<row>
<entry>Level</entry>
<entry>
<p>Non-Benefit</p>
</entry>
<entry>
<p>Benefit</p>
</entry>
</row>
根据
Code
订单匹配,应选择 Description
值。我将变量用于 Code
匹配。但它仍然错误地选择了 Description
值。所以描述应该按照代码顺序选择。
我猜你想做类似的事情:
XSLT 2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:key name="detail-by-code" match="Detail" use="Code" />
<xsl:template match="/Group">
<xsl:variable name="headings" select="Maps/Map" />
<table>
<!-- header -->
<row>
<xsl:for-each select="$headings">
<entry>
<p>
<xsl:value-of select="Code"/>
</p>
</entry>
</xsl:for-each>
</row>
<!-- data -->
<xsl:for-each select="Details">
<xsl:variable name="current-row" select="." />
<row>
<xsl:for-each select="$headings">
<entry>
<p>
<xsl:value-of select="key('detail-by-code', Code, $current-row)"/>
</p>
</entry>
</xsl:for-each>
</row>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>