【发布时间】:2012-05-17 13:36:22
【问题描述】:
我需要获取我为其编写了 xsl 函数的当前节点的 xpath
<func:function name="fn:getXpath">
<xsl:variable name="xpath">
<xsl:for-each select="ancestor-or-self::*">
<xsl:value-of select="concat($xpath, name())" />
<xsl:if test="not(position()=last())">
<xsl:value-of select="concat('/', $xpath)" />
</xsl:if>
</xsl:for-each>
</xsl:variable>
<func:result select="$xpath" />
</func:function>
但是当我运行它时,我收到以下错误
file:///D:/test.xsl; Line #165; Column #63; Variable accessed before it is bound!
file:///D:/test.xsl; Line #165; Column #63; java.lang.NullPointerException
我正在使用 xalan 2.7.0。请帮忙。
【问题讨论】:
-
Evem 修复明显错误后,生成的表达式通常是正确的。为什么?因为在一般情况下,这个 XPath 表达式会选择很多元素——而不仅仅是一个。
-
如果你有两个同名的兄弟姐妹,你就会遇到问题——
<a><b /><b /></a>将为两个<b />节点提供相同的表达式。您应该找到一种添加[1]、[2]等的方法,可能使用position()函数或preceding-sibling轴。
标签: xslt reflection xpath xslt-1.0 xalan