我有一些问题需要访问我想要的节点。
这是我简化的xml:
<chain>
<components>
<component>
<place>2</place>
<name>bbb</name>
</component>
<component>
<place>1</place>
<name>aaa</name>
</component>
<component>
<place>3</place>
<name>ccc</name>
</component>
</components>
</chain>
我想要的输出:
aaa is connected to bbb
bbb is connected to ccc
和我的xsl:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" indent="yes"/>
<xsl:template match="text()"/>
<xsl:template name="writeComponent">
<xsl:param name="my_component"/>
<xsl:value-of select="$my_component/name"/>
</xsl:template>
<xsl:template match="/chain/components">
<xsl:for-each select="component">
<xsl:variable name="nextPlace" select="./place + 1"/>
<xsl:call-template name="writeComponent">
<xsl:with-param name="my_component" select='component'/>
</xsl:call-template>
is connected to
<xsl:call-template name="writeComponent">
<xsl:with-param name="my_component" select="component[place = '$nextPlace']"/>
</xsl:call-template>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我需要在参数
中使用不同的节点调用相同的模板感谢任何帮助,谢谢
编辑:我找到了解决问题的方法
电话:
<xsl:call-template name="writeComponent">
<xsl:with-param name="component_param" select="."/>
</xsl:call-template>
is connected to
<xsl:call-template name="writeComponent">
<xsl:with-param name="component_param" select="/chain/components/component[place = $nextPlace]"/>
</xsl:call-template>
在被调用的模板中,您需要循环<xsl:for-each select="$component_param">
答案 0 :(得分:0)
在select="component[place = '$nextPlace']
中,您需要select="component[place = $nextPlace]
才能正确引用变量。但是,由于for-each
处理component
元素,我不知道<xsl:with-param name="component" select='component'/>
如何在您的示例XML中选择任何内容。模板匹配,for-each和调用模板的整个组合似乎有问题,您可能想向我们展示您想要的输入样本的结果,然后我们可以建议更简洁,更简单的XSLT方法。