XSLT 键元素:"use" "match"的父节点



我似乎无法弄清楚这件事。是否有可能拥有以下密钥?

<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 元素作为其上下文项对其进行计算。

举的例子似乎是合法的,但不是很有用;不清楚你希望他们做什么。

相关内容

  • 没有找到相关文章

最新更新