我正在使用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语句没有被执行......
所以,请指导我摆脱这个问题...
答案 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>
如果那不符合您的要求,请显示您想要的结果。