我有一个.xml文件,其中包含两组我希望根据其ID值(1.2)相互匹配的信息。例如,这个片段。
<rule id="1.2">
<checker id="checker.id">
<description locale="en">description</description>
</checker>
</rule>
<rule id="1.2">
<checker>
<category locale="en">Advisory</category>
<decidable locale="en">Yes</decidable>
</checker>
</rule>
我为每个规则都有一个.xsl,将值添加到表条目
<row>
<entry>
<xsl:value-of select="@id"/>
</entry>
<entry>
<xsl:for-each select="checker">
<xsl:value-of select="category[@locale=$locale]"/>
</xsl:for-each>
</entry>
<entry>
<xsl:for-each select="checker">
<xsl:value-of select="decidable[@locale=$locale]"/>
</xsl:for-each>
</entry>
<entry>
<xsl:for-each select="checker">
<p>
<codeph>
<xsl:value-of select="@id"/></codeph><xsl:text> </xsl:text>
<xsl:value-of select="description[@locale=$locale]"/>
</p>
</xsl:for-each>
</entry>
</row>
当前结果给了我这个,但它创建了两个单独的行,即使ID是相同的。如何将具有相同ID的信息放在同一行?
<row>
<entry>1.2</entry>
<entry>Advisory</entry>
<entry>Yes</entry>
<entry>
<p>
<codeph/></p>
</entry>
</row>
<row>
<entry>1.2</entry>
<entry/>
<entry/>
<entry>
<p>
<codeph>checker.id</codeph>description</p>
</entry>
</row>
期望的结果:
<row>
<entry>1.2</entry>
<entry>Advisory</entry>
<entry>Yes</entry>
<entry>
<p><codeph>checker.id</codeph>description</p>
</entry>
</row>
答案 0 :(得分:2)
这是所谓的Muenchian grouping
的变种
以下XSLT选择所有<xsl:key>
的已排序<rule>
的第一个匹配项,然后通过应用{将所有<rule>
与相同的@id
匹配来编译所需的结果带有谓词的{1}}运算符。
//