gpt4 book ai didi

debugging - XSLT 1.0 中的输出上下文节点(完整路径)?

转载 作者:行者123 更新时间:2023-12-02 00:33:28 29 4
gpt4 key购买 nike

出于调试目的,从模板中输出上下文节点的完整路径会很方便,是否有未缩写的 xpath 或函数来报告这个?

示例模板:

<xsl:template match="@first">
<tr>
<td>
<xsl:value-of select="??WHAT TO PUT IN HERE??"/>
</td>
</tr>
</xsl:template>

示例(删节)输入文档:

<people>
<person>
<name first="alan">
...

模板的输出类似于:

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

关于debugging - XSLT 1.0 中的输出上下文节点(完整路径)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5695964/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com