<xsl:variable name="myPattern" select="node1|node2"/>
<xsl:template match="$myPattern">
...
</xsl:template>
<xsl:template match="/">
...
<xsl:for-each select="distinct-values(//$myPattern/name/text()">
...
</xsl:for-each>
</xsl:template>
我用XSLT版本2.0和3.0无济于事尝试这样做。任何提示?
原因:该模式有点复杂,我想在几个地方使用它,而不仅仅是这场比赛。
编辑:
我解决我的问题,现在通过接受一个事实,即该变量不包含字符串/模式,但结果节点。如果我将其修改为
<xsl:variable name="myNodes" select="//(node1|node2)"/>
<xsl:template match="$myNodes">
...
</xsl:template>
<xsl:template match="/">
...
<xsl:for-each select="distinct-values($myNodes/name/text()">
...
</xsl:for-each>
</xsl:template>
它工作正常。
我仍然想知道为什么不能简单地将字符串存储在变量中,并在允许字符串的任何位置使用它。
XSLT 3.0允许您使用例如'match =“$ xyz”'并解释“$ xyz匹配变量$ xyz的值中存在的任何节点”。因此,您需要向我们展示一个最小但完整的XML,XSLT样本,您期望的输出,输出或错误,以及有关使用的XSLT处理器的信息,以便我们能够分辨出哪些是错误的。显然,我希望你的变量声明看起来像例如' ',除非你正在寻找的元素真的是根元素。 –
@MartinHonnen:你说得对。我希望在短时间内让其他人在搜索答案时节省时间。我认为你的评论比你的回答更好,因为这是我解决它的方法:' '。 –
mdr
@mdr您将不得不使用某种'evaluate()'函数将字符串转换为XPath表达式(如果这就是您的意思)。 –