【问题标题】:Convert DOM Node to String without using javax.* classes不使用 javax.* 类将 DOM 节点转换为字符串
【发布时间】:2013-12-20 13:53:57
【问题描述】:

当我尝试使用找到的解决方案在 JavaScript 中从 Node 转换为 String 时,从这一行开始

var transformer = javax.xml.transform.TransformerFactory.newInstance().newTransformer();

它说

消息:(无法执行所需的评估:JavaScript 错误:内部错误:ReferenceError:未定义“javax”。 (JavaScript 错误:内部错误:ReferenceError:“javax”不是 定义。)

但是 java* 包中的类可以正常工作

这行得通:

var writer = new java.io.StringWriter();

是否可以在不使用 javax* 包中的类的情况下将 Node 转换为 String

虽然使用 org.w3c.* 是可以的

【问题讨论】:

  • 你想做什么?您应该编写一个帮助类来为您处理 XML 并将其实例绑定到您的脚本引擎。
  • @mwhs 我正在使用允许在 javascript 中编写 java 代码的系统工作(javascript 中的新功能,也许在 js 中编写 Java 很常见)。系统中的某些 API 方法返回 DOM 节点实例,我需要在 javascript 中使用 Java 语言将其转换为字符串。那个 javascript“引擎”似乎不支持 javax 包,我无权访问链接包或自定义编写的 /*jar//*class 文件。我需要使用 java* 包中的类将该节点转换为字符串
  • @VextoR myNode.outerHTML
  • 我认为这是一种误解。您实际上是在编写 javascript,但某些 java 类已以其全名绑定到您的 javascript 引擎。 java中没有关键字var。也许您应该告诉我们您的系统的名称。
  • 我很确定 Progress Sonic ESB 在内部使用 Rhino 作为其 JavaScript 引擎。我已经相应地更新了问题的标签。

标签: java javascript xml rhino java-5


【解决方案1】:

Sonic ESB 在内部使用 Rhino 作为其 JavaScript 引擎。

从 JavaScript 调用 Java 时,应使用 Packages 引用 Java 类:Packages.javax.xml.transform.TransformerFactory 您可以毫无问题地使用 java 包的原因是 Packages.java 在全局变量 java 中具有别名。

当你这样做时,你可以使用 javax 包中的类就好了。事实上,您可以将任何您喜欢的 jar 添加到类路径中并使用这些类。

https://developer.mozilla.org/en-US/docs/Rhino/Scripting_Java

【讨论】:

    最近更新 更多