以下返回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
?
答案 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]