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>

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

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

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

我想做的是,

如果我遇到元素,那么我必须调用下面给出的模板......

<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 语句......

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

4

1 回答 1

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>

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

于 2012-12-17T16:57:45.713 回答