-2

我正在使用 xslt 2.0 将一个 xml 文件转换为另一个 xml 文件。在 XSLT 2.0 中,我创建了一个带有一个参数的函数。实际上,参数是<w:p>元素的集合。所以,在我<xsl:for-each-group>用来获取每个参数的函数中<w:p>并逐个处理。假设,下面提到的 XML 文件<w:table在元素之间包含一个 > 元素。所以<w:p>,现在我想following-sibling::w:table在处理块中的每个<w:p>元素后检查函数<xsl:for-each-group>

XML 文件

 <w:document>
      <w:p> para0</w:p>
      <w:p> para1</w:p>
      <w:table>table</w:table>
      <w:p>para3</w:p>
</w:document>

XSLT 代码段:

<xsl:for-each-group select="$paragraphs" group-starting-with="w:p">           
                <xsl:apply-templates select="current-group()"> <!-- for processing <w:p>elements -->
                </xsl:apply-templates>         

                <xsl:if test="following-sibling::w:table"> <!--check following-sibling of current <w:p> is <w:table> -->
                        <xsl:apply-templates select="following-sibling::w:table">    </xsl:apply-templates>
                    </xsl:if>    
    </xsl:for-each-group>    

但是在following-sibling::w:table处理第一个元素时调用的检查。我只会在处理第二个元素时调用。所以,我只想检查following-sibling当前处理元素的下一个立即数是否在那个地方......

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

4

1 回答 1

0

在 xsl:for-each-group 中,上下文项是当前组中的第一项。因此,following-sibling 将相对于组中的第一项进行选择。如果要相对于第二项进行选择,请使用 current-group()[2]/following-sibling::x。(此外,您可能只想要第一个跟随兄弟,这将是 following-sibling::x[1])。

但是随后您谈论的是“当前处理元素”,这是您自己发明的术语。是否要处理组中每个项目的以下兄弟姐妹?在这种情况下,我希望在 xsl:for-each-group 中看到一个 xsl:for-each select="current-group()"。

于 2012-07-31T08:06:24.873 回答