假设我有一个像这样的xml文件:
<root>
<a><b><c> w </c></b></a>
<x><y><z> w </z></y></x>
<x><y><z> w </z></y></x>
和像这样的xsl行:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/root">
<xsl:value-of select="count( ./a/b[c = ./x/y/z] )"/>
</xsl:template>
</xsl:stylesheet>
结果是0(我希望它是2:)
这只是我正在尝试做的一个简化示例。基本上我想计算来自'a / b / c'的东西出现在文档的其他部分中的次数,正如你所看到的,我做错了什么
答案 0 :(得分:2)
使用强>:
/*/x/y/z[. = current()/a/b/c]
这意味着:
选择所有/*/x/y/z
个元素,其字符串值等于current()/a/b/c
个元素之一的字符串值。
注意标准XSLT函数current()
计算当前节点(已选择模板的节点,或{{1}正文的节点正在应用。
答案 1 :(得分:1)
我熟悉XSLT 1.0;但是我在这里看到的两件事情都是关闭的:
./x/y/z/
,而不是在 root 的上下文中 - 因此xpath没有按预期执行。 在XSLT 1.0中(可能在2.0中没有多少ado):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/root">
<xsl:variable name="self" select="."/>
<xsl:value-of select="count(x/y/z[. = $self/a/b/c] )"/>
</xsl:template>
</xsl:stylesheet>
在您的真实代码中,可能更清楚的是不定义指向/root
的变量,而是直接存储您正在寻找的字符串:<xsl:variable name="val" select="a/b/c"/>
;无论哪种方式都可以。