我正在尝试运行这个XPath表达式(也就是说,尝试计算我的XML文件中有多少元素内容字符串以letter-one-f('a')或letter-two-f('A')结尾:
<xsl:value-of select="count( substring(.,string-length(.) -1,string-length(.) -1)=$letter-one-f or substring(., string-length(.) -1,string-length(.) -1)=$letter-two-f )"/>
但我不知道如何引用'当前值'。我所知道的是它通常用点''表示。 。我不知道在哪里放'模板匹配'或者甚至需要它。
另一方面,这段代码有效,因为我已经指定它应该以'/ n-gram-sorted / n-gram'为单位:
<xsl:value-of select="count(/n-grams-sorted/n-gram[starts-with(.,$letter-one-f) or starts-with(.,$letter-two-f) ])"/>
我只是不知道如何将它应用于第一个表达式。我将在哪里获得“当前价值”?我怎么告诉它我要查看'/ n-gram-sorted / n-gram'?这就是我需要让我的表达工作(我在编辑器的'xpath视图'中尝试过它)。
源XML文件示例:
<n-grams-sorted analysis="N_GRAM_TOKEN3" range="Total Set">
<n-gram position="1" frequency="3535" probability="0.0447735">. = =</n-gram>
<n-gram position="2" frequency="322" probability="0.0040784">= = De</n-gram>
<n-gram position="3" frequency="284" probability="0.0035971">= = Het</n-gram>
<n-gram position="4" frequency="207" probability="0.0026218">= = Hij</n-gram>
<n-gram position="5" frequency="168" probability="0.0021278">= = Dit</n-gram>
由于
答案 0 :(得分:0)
通过链接的样式表,很明显你根本没有使用模板匹配。您只是匹配文档的根节点(/
),然后从中调用模板。
通过这种方式,您的当前节点(.
)是文档根目录。这可以通过将XPath更改为:
n-grams-sorted/n-gram[starts-with(.,$letter-one-f) or starts-with(.,$letter-two-f) ]
或,等于
./n-grams-sorted/n-gram[starts-with(.,$letter-one-f) or starts-with(.,$letter-two-f) ]
或,等于
current()/n-grams-sorted/n-gram[starts-with(.,$letter-one-f) or starts-with(.,$letter-two-f) ]
根据您的工作情况,如果您只处理n-gram节点,我认为您可以用以下内容替换样式表初始规则:
<xsl:template match="n-grams-sorted">
<xsl:call-template name="draw-grid">
<xsl:with-param name="rcount">28</xsl:with-param>
<xsl:with-param name="ccount">6</xsl:with-param>
<xsl:with-param name="r">0</xsl:with-param>
<xsl:with-param name="c">0</xsl:with-param>
</xsl:call-template>
</xsl:template>
然后将XPath简化为:
n-gram[starts-with(.,$letter-one-f) or starts-with(.,$letter-two-f)]
将当前节点更改为最顶层节点( n-gram-sorted )。
答案 1 :(得分:0)
以下是解决方案:
<xsl:value-of select="count(/n-grams-sorted/n-gram[substring(.,string-length(.), string-length(.))=$letter-one-f or substring(.,string-length(.), string-length(.))=$letter-two-f ] )"/>
整个问题不是当前节点..问题是我一直得到'0'因为我做了字符串长度(。)-1,这是不正确的,因为那样会意思是“sonya”将成为“sony”并从'y'开始。 'y'永远不会导致'a',这就是为什么0 ...所以解决方案是使用字符串长度(。)..而不是-1。