XSLT调用嵌入XML的java



我有一个xsl片段:

<GOGO>
<xsl:variable name="test">
<xsl:copy-of select="response"/>
</xsl:variable>
<xsl:copy-of select="javamap:echo($test)"/>
</GOGO>

这个片段调用一个java方法:

public static String echo(String a) {
System.out.println("HERE I AM:"+a+":");
return "<xxx>" + a + "</xxx>";
}

如果我只有以下片段:

<GOGO>
<xsl:copy-of select="response"/>
</GOGO>

结果转换将类似于:

<foo>val1</foo>
<bar>val2</bar>

然而,当调用Java方法时,系统输出是意外的,只是打印出来:

val1
val2

我做错了什么?如何让java方法输出预期的xml片段?

编辑:回答那些帮助我的人的问题:我正在使用Saxon9。另一个线程中的某个人向我展示了的值的使用和disable output escape="yes",这使我能够在输出中打印出xxx元素标记。然而,我仍然在输入端感到困惑,我希望我的java类完全了解我传递给它的完整xml片段

foo和bar标记是我想要传递到java函数中的xml。在java函数中,我想进一步将xml封装在xxx标记中。

编辑2:以下提示使我能够得出以下解决方案:公共静态字符串echo(节点a)抛出异常{

StringWriter writer = new StringWriter();
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(new DOMSource(a), new StreamResult(writer));
String xml = writer.toString();
return xml;
}

扩展函数的语义取决于您使用的处理器,您还没有告诉我们,但我认为任何处理器都不太可能按照您期望的方式工作,也就是说,将函数返回的字符串视为要解析并转换为节点的词法XML。如果你想返回一个节点,你必须在返回它之前构造一个节点。节点的类型(例如,它是否是DOM节点,它属于什么文档等)将取决于系统;总的来说,我建议不要在扩展函数中操作节点——XSLT做得更好。

最新更新