我似乎无法弄清楚这件事。是否有可能拥有以下密钥?
<xsl:key name="kMatchSentenceID_withTokId" match="sentences/sentence/@ID"
use="--and here return the 'sentences' node--"/>
我不明白"use"是如何工作的,它不应该是匹配匹配时返回的值吗?
我看到use="."
在我的情况下返回属性的值。(为什么?它与比赛有关吗?.
不应该是指node()
吗?而不是node()/@
)
但最重要的是,我为什么不能做这样的事情:use="parent::sentence[@ID=name()]"
那我该怎么做呢?我需要@ID上的匹配项,但要返回它的父级(更具体地说,父级的 ID)。
谢谢。
我不明白"使用"是如何工作的,不是吗 应该是你返回的值 比赛何时匹配?
不,use
没有指定要"返回"的任何内容。从规格:
use 属性为 指定 钥匙;计算表达式 对于与 模式。
在键到值的映射中,use
指定键(规范语言中的键的值),match
指定这些键将映射到的值。换句话说,match
指定要分组的内容,use
指定如何对它们进行分组。
假设您要按sentence
元素的父@ID
对元素进行分组 sentence
。你可以这样做:
<xsl:key name="kMatchSentenceID_withTokId" match="sentences/sentence"
use="parent::*/@ID"/>
你的表达毫无意义:
<xsl:key name="kMatchSentenceID_withTokId" match="sentences/sentence/@ID"
use="parent::sentence[@ID=name()]"/>
。因为它试图按父元素之一对ID
属性进行分组sentence
这已经是一个错误,因为属性没有父元素。
假设这样的事情
<sentences id="parent">
<sentence id="childa"/>
<sentence id="childb"/>
</sentences>
你需要:
<xsl:key name="sentence" match="sentences" use="sentence/@id"/>
然后,例如,XPath key('sentence','childa')/@id
将返回 'parent'
.
困难,因为你实际上并没有说出你要解决什么问题。但是您似乎对密钥有一些概念上的混淆。可以这样想:如果要查找属性 P 的值为 V 的 E 元素,则需要将键定义为 <xsl:key name="N" match="E" use="P"/>
其中 P 是一个 XPath 表达式,它使用 E 元素作为其上下文,确定相关属性的值;然后您需要将其称为key('N', V)
.use 表达式可以是您喜欢的任何 XPath 表达式,并且将使用匹配的 E 元素作为其上下文项对其进行计算。
举的例子似乎是合法的,但不是很有用;不清楚你希望他们做什么。