如何在XPath (XSLT)中引用当前值



我正在尝试运行这个XPath表达式(即,尝试计算XML文件中有多少元素内容字符串以字母1 -f ('a')或字母2 -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 )"/>

,但我不知道如何引用"当前值"。我只知道它通常用一个点来表示。"。我不知道该把'template match'放在哪里,或者是否需要。

另一方面,这段代码可以工作,因为我已经指定它应该在'/n-grams-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-grams-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>

谢谢

通过链接的样式表,很明显您根本没有使用模板匹配。您只需匹配文档的根节点(/),然后从中调用模板。

这样,您的当前节点 (.)就是文档根。这可以通过将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>

,然后简化为:

  n-gram[starts-with(.,$letter-one-f) or starts-with(.,$letter-two-f)]

为当前节点更改为最上面的节点(n-grams-sorted)。

解决方案如下:

<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…所以解决方案是使用string-length(.)…

相关内容

  • 没有找到相关文章

最新更新