我似乎无法弄明白这件事。是否可以使用以下密钥?
<xsl:key name="kMatchSentenceID_withTokId" match="sentences/sentence/@ID"
use="--and here return the 'sentences' node--"/>
我不知道“使用”是如何工作的,是不是它应该是匹配匹配时返回的值?
我看到use="."
在我的情况下返回属性的值。 (为什么?是否与匹配相关?不应.
表示node()
?而不是node()/@
)
但最重要的是,为什么我不能这样做:use="parent::sentence[@ID=name()]"
那我怎么办呢?我需要在@ID上匹配,但要返回它的父级(更具体地说,是父级的ID)。
谢谢。
答案 0 :(得分:3)
我不知道“使用”是如何工作的,不是吗 应该是你返回的价值 比赛何时匹配?
不,use
未指定任何内容为“已退回”。来自the spec:
use属性是 指定值的表达式 钥匙;表达式被评估 每个节点匹配一次 图案。
在键值use
的映射中,指定键 - 键的值,以规范的语言 - 和match
指定这些键将映射到的值。换句话说,match
指定要分组的,use
指定如何对其进行分组。
假设您希望按其父sentence
的{{1}}对@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
属性进行分组,这已经是一个错误,因为属性没有父母。
答案 1 :(得分:1)
假设这样的事情
<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'
。
答案 2 :(得分:1)
帮助你有点困难,因为你实际上没有说出你要解决的问题。但是你似乎对键有一些概念上的困惑。以这种方式考虑它们:如果要查找属性值为V的E元素,则需要将键定义为<xsl:key name="N" match="E" use="P"/>
,其中P是XPath表达式,使用E元素作为其背景,决定了有关财产的价值;然后你需要将其称为key('N', V)
。 use表达式可以是您喜欢的任何XPath表达式,它将使用匹配的E元素作为其上下文项进行评估。
你给出的例子似乎是合法的但不是很有用;目前还不清楚你希望他们做什么。