0

下面返回 11 个节点:

//xs:schema/xs:element/xs:keyref

以下返回Artist_FK_AlbumArtistId

ars:Relation/@Name

这将返回一个节点:

//xs:schema/xs:element/xs:keyref[@name='Artist_FK_AlbumArtistId']

但是,以下内容不返回任何内容:

//xs:schema/xs:element/xs:keyref[@name=ars:Relation/@Name]

如何使用 的值ars:Relation/@Name来过滤掉xs:keyref我想要的?

4

3 回答 3

1

我会定义一个键

<xsl:key name="ref-by-name" match="xs:element/xs:keyref" use="@name"/>

那么你可以使用key('ref-by-name', ars:Relation/@name).

于 2013-09-19T14:10:38.407 回答
0

我总是在询问十分钟后设法弄清楚...

这是如何做到的:

<xsl:variable name="relationName" select="ars:Relation/@Name" />
<xsl:value-of select="//xs:schema/xs:element/xs:keyref[@name=$relationName]"/>
于 2013-09-19T13:32:35.573 回答
0

在其自己的

ars:Relation/@Name

是相对于执行 XPath 的上下文中的当前节点的路径。但是谓词中的相同表达式是相对于谓词正在测试的节点的,即

//xs:schema/xs:element/xs:keyref[@name=ars:Relation/@Name]

ars:Relation正在寻找xs:keyref. 但是,由于您已将问题标记为“xslt”,因此您可以访问该current()函数,该函数提供从谓词内部到整个表达式之外的当前上下文节点的访问:

//xs:schema/xs:element/xs:keyref[@name = current()/ars:Relation/@Name]
于 2013-09-20T09:26:09.907 回答