我正在尝试在服务器端运行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方法或类似的东西。)答案 0 :(得分:1)
Nashorn支持load和loadWithNewGlobal原语。
'load'从URL加载脚本,将文件加载到当前的全局范围。
'loadWithNewGlobal'将给定脚本加载到新的全局范围中。这将避免使用加载的脚本文件/ URL中的全局定义来污染当前的全局范围。
有关这些的更多信息,请访问“openjdk nashorn extensions”wiki。
(不相关)您实际上可以使用Java XML解析器API解析XML文档,因为nashorn支持从脚本代码调用任意Java API。您可以使用Object.bindProperties(nashorn wiki中记录的另一个扩展)进行转换