我有一个看起来像的文件
<root>
<element>
<subelement1 />
<subelement2 />
</element>
<element>
<subelement2 />
<subelement1 />
</element>
</root>
Run Code Online (Sandbox Code Playgroud)
在我的XSLT表中,/element[2]/[someNode]我希望得到一个代表距离的数字/element[1]/[someNode](即前面兄弟的数量/element1/[someNode]).例如,在的情况下/element[2]/subelement1,我想有一些办法让数字2,从远处/element[1]来/element[1]/subelement2.我只需要第一个实例的给定节点名称的距离<element>.
我直觉地认为我可以构建它
<xsl:variable name="nodename" select="name()" />
<xsl:value-of select="/element[1]/$nodename/preceding-sibling::*" />
Run Code Online (Sandbox Code Playgroud)
但不幸的是这张表没有编译.我想在XSLT中实现什么?
您不能将XSLT变量用作XPATH语句的轴,但可以在谓词过滤器中使用它.因此,如果要匹配任何元素(即*),然后将其限制为名称()等于存储在变量(即*[name()=$nodename])中的值的元素,则XPATH将有效.
您正在构建的XPATH将返回匹配元素的值.如果要返回与该模式匹配的元素数,可以使用该count()函数.
您的示例XML具有文档元素<root>,但您的XPATH不包含<root>.
这将使用上下文节点指定的变量返回previous-sibling元素的数量:
<xsl:variable name="nodename" select="name()" />
<xsl:value-of select="count(/root/element[1]/*[name()=$nodename]/preceding-sibling::*)" />
Run Code Online (Sandbox Code Playgroud)
你可以消除变量,只需使用:
<xsl:value-of select="count(/root/element[1]/*[name()=name(current())]/preceding-sibling::*)" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5026 次 |
| 最近记录: |