如何在xslt 2.0中按顺序调用我的模板和我的函数?

时间:2012-12-17 15:47:22

标签: xslt xpath xslt-2.0 xpath-2.0

我正在使用xslt2.0将一种xml格式转换为另一种xml格式。这是我的示例xml文档。

<w:document>
    <w:body>
             <w:p>Para1</w:p> 
             <w:p>Para2</w:p> 
             <w:p>Para3</w:p> 
             <w:p>Para4</w:p> 
    </w:body>
</w:document>

最初这是我的xml格式。因此,我通过下面给出的xslt中的函数处理了每个<w:p>元素...

 <xsl:template match="document">
      <Document>
    <xsl:sequence select="mf:group(body/p, 1,count(//w:body//w:p)-1)"/>
      </Document>    
</xsl:template>

所以,在那个xslt函数中,我已经编码了如何重新格式化这些元素。它工作得很好......

但是现在,Xml格式被重组,如下所示......

<w:document>
        <w:body>
                 <w:tbl><!--some text with children elements--></w:tbl>
                 <w:tbl><!--some text with children elements--></w:tbl>
                 <w:p>Para1</w:p> 
                 <w:p>Para2</w:p> 
                 <w:p>Para3</w:p> 
                 <w:p>Para4</w:p> 
        </w:body>
 </w:document>

所以,到目前为止,我必须以相同的顺序处理这两个元素......

我想做的是,

如果我遇到elemtents,那么我必须拨打下面给出的模板......

<xsl:template match="document">
     <Document>
        <xsl:for-each select="w:tbl">
          <xsl:apply-templates select="w:tbl">
              </xsl:apply-templates>
      </xsl:for-each>
        <xsl:sequence select="mf:group(body/p, 1,count(//w:body//w:p)-1)"/>
     </Document>    
</xsl:template>

<xsl:template match="w:tbl">
<!--xslt code here -->
</xsl:template>

但是当我尝试转换时,for-each语句没有被执行......

所以,请指导我摆脱这个问题...

1 个答案:

答案 0 :(得分:1)

我认为不是

<xsl:template match="document">
     <Document>
        <xsl:for-each select="w:tbl">
          <xsl:apply-templates select="w:tbl">
              </xsl:apply-templates>
      </xsl:for-each>
        <xsl:sequence select="mf:group(body/p, 1,count(//w:body//w:p)-1)"/>
     </Document>    
</xsl:template>

你只想要

<xsl:template match="document">
     <Document>
        <xsl:apply-templates select="w:body/w:tbl"/>
        <xsl:sequence select="mf:group(body/p, 1,count(//w:body//w:p)-1)"/>
     </Document>    
</xsl:template>

如果那不符合您的要求,请显示您想要的结果。