微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

XSLT调用java嵌入XML

我有一个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.
一个线程中的某个人向我展示了使用value-of和disable-output-escaping =“yes”,它允许我在输出中打印出xxx元素标记.但是我仍然难以接受输入端,我希望我的java类能够完全了解我传递给它的完整xml片段.

foo和bar标签是我想要传递给java函数的xml.在java函数里面我想进一步将xml包装在xxx标签中.

编辑2:
下面的提示允许我推导出以下解决方案:
    public static String echo(Node a)抛出Exception {

    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可以更好地完成工作.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。