XSLT 1.0中的输出上下文节点(完整路径)? [英] Output Context Node (full path) in XSLT 1.0?
本文介绍了XSLT 1.0中的输出上下文节点(完整路径)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
为了进行调试,可以方便地从模板中输出上下文节点的完整路径,是否有未经缩略的xpath或函数来报告?
For debugging purposes it would be handy to output the full path of the context node from within a template, is there unabbreviated xpath or function to report this ?
示例模板:
<xsl:template match="@first">
<tr>
<td>
<xsl:value-of select="??WHAT TO PUT IN HERE??"/>
</td>
</tr>
</xsl:template>
示例(摘录)输入文档:
Example (Abridged) input document:
<people>
<person>
<name first="alan">
...
模板的输出将如下所示:
The output from the template would be something like:
people / person / name / @first
或类似的东西。
推荐答案
此转换为所需节点生成XPath表达式:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:variable name="vNode" select=
"/*/*[2]/*/@first"/>
<xsl:apply-templates select="$vNode" mode="path"/>
</xsl:template>
<xsl:template match="*" mode="path">
<xsl:value-of select="concat('/',name())"/>
<xsl:variable name="vnumPrecSiblings" select=
"count(preceding-sibling::*[name()=name(current())])"/>
<xsl:variable name="vnumFollSiblings" select=
"count(following-sibling::*[name()=name(current())])"/>
<xsl:if test="$vnumPrecSiblings or $vnumFollSiblings">
<xsl:value-of select=
"concat('[', $vnumPrecSiblings +1, ']')"/>
</xsl:if>
</xsl:template>
<xsl:template match="@*" mode="path">
<xsl:apply-templates select="ancestor::*" mode="path"/>
<xsl:value-of select="concat('/@', name())"/>
</xsl:template>
</xsl:stylesheet>
应用于以下XML文档:
<people>
<person>
<name first="betty" last="jones"/>
</person>
<person>
<name first="alan" last="smith"/>
</person>
</people>
正确的结果生成:
/people/person[2]/name/@first
这篇关于XSLT 1.0中的输出上下文节点(完整路径)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文