如何在javascript Nashorn引擎中解析XML?

时间:2015-01-14 17:17:36

标签: javascript node.js xml-parsing xmldom nashorn

我正在尝试在服务器端运行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里面使用'require'库?也许有一个很好的替代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方法或类似的东西。)

1 个答案:

答案 0 :(得分:1)

Nashorn支持load和loadWithNewGlobal原语。

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

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

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

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