我在index.xml中有这个,我使用XSLT 2.0进行转换:
<numberGroup>
<entry>
<file>n1.xml</file>
</entry>
<entry>
<file>n2.xml</file>
</entry>
<entry>
<file>n3.xml</file>
</entry>
..... many more entries
</numberGroup>
... and more numberGoups
在样式表中,我有两个模板:
<xsl:template match="numberGroup">
<xsl:apply-templates select="entry">
<xsl:with-param name="ngFiles" select="entry/file" tunnel="yes"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="entry">
<xsl:param name="ngFiles" required="yes" tunnel="yes"/>
....
</xsl:template>
现在,选择=&#34;条目/文件&#34;每次为&#34;条目/文件&#34;执行第二个模板时,选择所有文件n1,n2,n3。 但是,我只需要选择包含&#34;条目/文件&#34;的文件。在我调用模板的文件之前。因此,当第二个模板为n1.xml执行时,ngFiles为空,当它为n2.xml执行时,ngFiles只有n1,当模板为n3.xml执行时,ngFiles只有n1和n2。 我想也许我可以做类似的事情:
<xsl:with-param name="ngFiles" select="entry/file[0 to .....]" tunnel="yes"/>
在第一个模板中。 对......的任何建议? 也许是前面的::文件左右的东西?
答案 0 :(得分:1)
您可以使用
从match="entry"
模板中检索所需的节点,而不是传递参数
preceding-sibling::entry/file
如果要将此值传递到其他模板,请执行以下操作:
<xsl:template match="numberGroup">
<xsl:apply-templates select="entry"/>
</xsl:template>
<xsl:template match="entry">
<xsl:param name="ngFiles" select="preceding-sibling::entry/file" tunnel="yes"/>
....
</xsl:template>
select
上的xsl:param
在包含它的模板的上下文中进行评估(即entry
元素是当前上下文项)而select
上with-param
在调用者的上下文中进行评估。