在嵌套的XSLT上使用position来获得类似的行

时间:2016-05-11 21:52:36

标签: xml xslt

我有一个相当复杂的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节。有没有更好的方法来进行这种转变。一个重要的注意事项是我根本无法改变输入。

1 个答案:

答案 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>