如何在javascript Nashorn引擎中解析XML

How to parse XML in javascript Nashorn engine?

本文关键字:XML 引擎 Nashorn javascript      更新时间:2023-09-26

我正在尝试在服务器端运行javascript(使用Nashorn),并在javascript代码中解析XML文件。默认情况下我们不能这样做:我们需要加载一些特定的.js库(DOMParser等)。

我尝试使用Node.js模块'XMLDOM',它可以在没有Node的情况下使用.js如下所示 https://github.com/jindw/xmldom/wiki/How-to-use-xmldom-in-non-node.js-JavaScript-platforms-like-Rhino-or-SpiderMonkey:

但是这个页面带来了一个新问题:我们需要将这些.js文件的加载封装在对象中,他们给了我们一个例子:

var dpObj = {};
loadObject ( dpObj, "dom-parser.js" );

(如果我们只是以经典方式加载.js文件,则不起作用)

我不知道如何编写这样的"loadObject"函数,但它可能是解决方案。也许我们也可以使用 Nashorn 中的"必需"库?也许有一个很好的替代XMLDOM模块?

有什么建议吗?

PS 1:我已经尝试将"env.rhino.1.2.js"(http://www.envjs.com)作为XMLDOM模块替代,但该脚本甚至无法由Nashorn加载...

PS 2:我也尝试在 Java 中解析 XML 并在 Javascript 中使用结果,但我不知道如何转换对象(我插入了一个 org.w3c.dom.Document 对象,但这与 javascript dom 文档不同...例如,我缺少gesDescendant方法或类似的东西)。

Nashorn 支持 load 和 loadWithNewGlobal 原语。

"load"将脚本从URL,文件加载到当前全局范围内。

'loadWithNewGlobal' 将给定的脚本加载到新的全局范围内。这将避免使用加载的脚本文件/URL 中的全局定义污染当前全局范围。

有关这些的更多信息,请访问"openjdk nashorn extensions"wiki。

(不相关)您实际上可以使用Java XML解析器API来解析XML文档,因为nashorn支持从脚本代码调用任意Java API。您可以使用Object.bindProperties(nashorn wiki中记录的另一个扩展)进行转换