我有一个相当复杂的XML输入,在其中我有一个表,我需要使用XSLT转换合并两个属性。所以,我在桌子上
<row>
<entry align="left">
<para>1234</para>
</entry>
<entry align="left">
<para>TITLE OF DATA 1</para>
</entry>
<entry align="left">
<entry>DESCRIPTION OF DATA 1</para>
</entry>
<entry align="left">
<para>NOTES FOR DATA 1</para>
</entry>
<!-- Section -->
<entry align="left">
<para>SECTION 1</para>
<para>SECTION 2</para>
</entry>
<!-- Sub-Section -->
<entry align="left">
<para>11</para>
<para>12</para>
</entry>
</row>
我需要在不同的数据上显示这些数据,但是部分和子部分需要合并为一行,如 Section 1/11 Section 2/12 。我正在尝试进行以下转换:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:for-each select="row">
<!-- Other stuff -->
<title>
<xsl:value-of select="entry[2]/para"/>
</title>
<section>
Section/Subsection:
<xsl:for-each select="entry[5]/para">
<xsl:value-of select="current()"/>/<xsl:value-of select="../../entry[6]/para[position()]"/>
</xsl:for-each>
</section>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
但是,这显示为第1/11节第2/11节。有没有更好的方法来进行这种转变。一个重要的注意事项是我根本无法改变输入。
答案 0 :(得分:0)
我大多在猜这里,但试试:
<xsl:for-each select="entry[5]/para">
<xsl:variable name="i" select="position()" />
<xsl:value-of select="."/>/<xsl:value-of select="../../entry[6]/para[$i]"/>
</xsl:for-each>