java - XSLT 调用嵌入了 XML 的 java

标签 java xml xslt tags

我有一个 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方法被调用时,system out的输出是意想不到的,只是打印出来:

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) 抛出异常{

    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 做得更好。

关于java - XSLT 调用嵌入了 XML 的 java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13822212/

相关文章:

java - stax从元素中获取属性值

python - 在Python中使用Xpath按属性选择祖先节点

xml - 在 XSLT/XPath 中选择唯一记录

javascript - 分配给 innerHTML 时 HTML 标签会发生变化

xml - 您将如何计算 XSLT 中的不同子字符串?

java - BroadcastReceiver 未收到 ACTION_SCREEN_OFF Intent

java - 如何使用 InetSocketAdress 创建新的 MulticastSocket?我总是收到 BindException

java - 上传图片时出现问题

java - 在java程序关闭之前调用方法

php - 如何使用php转换xml中的特殊字符?