Xml 我可以在XSLT中动态构建这个XPath查询吗?
我有一个文件看起来像Xml 我可以在XSLT中动态构建这个XPath查询吗?,xml,xslt,xpath,Xml,Xslt,Xpath,我有一个文件看起来像 <root> <element> <subelement1 /> <subelement2 /> </element> <element> <subelement2 /> <subelement1 /> </element> </root> 但不幸的是,这张表
<root>
<element>
<subelement1 />
<subelement2 />
</element>
<element>
<subelement2 />
<subelement1 />
</element>
</root>
但不幸的是,这张表没有编译。我试图在XSLT中实现的是可能的吗?
*[name()=$nodename]
可能是您想要的,而不是$nodename
,但是您最好用local-name()和namespace-uri()的值定义两个变量,并检查例如*[local-name()=$localname和namespace-uri()=$namespaceuri]
以命名空间安全的方式选择元素。不幸的是,构建xpath是不可能的。XPath是静态编译的;您不能动态生成它们(或者如果生成,它们只是字符串,无法执行)
但是,您可以编写一个查询,该查询碰巧交叉引用了几个本身是动态的值
*
),然后将其限制为name()等于存储在变量中的值的元素(即*[name()=$nodename]
),则XPATH将有效count()
函数
,但XPATH不包含
<xsl:variable name="nodename" select="name()" />
<xsl:value-of select="count(/root/element[1]/*[name()=$nodename]/preceding-sibling::*)" />
您可以消除该变量,只需使用:
<xsl:value-of select="count(/root/element[1]/*[name()=name(current())]/preceding-sibling::*)" />
您的示例似乎不一致:在
/element[2]/[someNode]
的上下文中,您希望找到/element[1]/[someNode]
,例如/element[2]/subelement1
中,您希望找到从/element[1]
到/element[1]/subelement2
的距离,[someNode]也是如此此处为子元素2或子元素1?另请参见
<xsl:value-of select="count(/root/element[1]/*[name()=name(current())]/preceding-sibling::*)" />