选择属性与XSLT中的节点值匹配的节点

时间:2013-09-19 13:22:38

标签: xslt

以下返回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

3 个答案:

答案 0 :(得分:1)

我会定义一个键

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

然后您可以使用key('ref-by-name', ars:Relation/@name)

答案 1 :(得分:0)

我总是在询问后十分钟才想出来......

以下是如何操作:

<xsl:variable name="relationName" select="ars:Relation/@Name" />
<xsl:value-of select="//xs:schema/xs:element/xs:keyref[@name=$relationName]"/>

答案 2 :(得分: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]