变量 XSLT 中的循环变量/参数引用

问题描述 投票:0回答:2

我有一个简单的 XML:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="form.xsl"?>
<x>
    <y>Hello</y>
</x>

form.xsl

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">

<xsl:output encoding="UTF-8" method="xml" indent="yes"/>
<xsl:variable name="topLevel">
        <xsl:variable name="inner" select="'Hi'" />
        <xsl:value-of select="$inner"/>
</xsl:variable>

<xsl:template match="/" >
    <xsl:value-of select="$topLevel" />
</xsl:template>


</xsl:stylesheet>

我正在使用

JRE 1.8,
,当我使用
javax.xml.transform.Transformer
转换 XML 时,我在
topLevel
变量上收到循环引用错误。

Circular variable/parameter reference in '[variable(topLevel)]

我发现已经有一个与此相关的问题记录在:JIRA,但不确定这是否已得到解决。

提供了各种解决方法,但没有提供解决方案。

注意:我没有包含任何第三方 jar,并且正在使用默认的 Transformer 实现。

java xml xslt
2个回答
0
投票

问题是由于(全局)变量中的变量定义造成的。

如果你移动这条线

在“topLevel”定义之外,您的代码可能会工作。

这种事情在 Xalan 2.7.0 中没问题,但在 2.7.1/2 中会触发错误消息

我写这篇文章是因为我今天遇到了同样的问题,这个答案在谷歌中是第一个,尽管它已经有7年了。

我无法告诉您为什么引入 Xalan 行为的这种变化,只是我观察到了同样的事情,这是我找到的解决方法


0
投票

就我而言,在删除 xalan(出于安全原因)并使用 jdk 内部实现后,我收到此错误:

com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl

因此,我将 Saxon-HE 12.4 添加到我的类路径中,它也运行良好,并且支持 ACCESS_EXTERNAL_DTD 等安全属性。

© www.soinside.com 2019 - 2024. All rights reserved.