2015-01-14 6 views
1

Я пытаюсь запустить javascript на стороне сервера (с помощью Nashorn) и, внутри javascript-кода, проанализировать XML-файл. Мы не можем сделать это по умолчанию: нам нужно загрузить определенную библиотеку .js (DOMParser и т. Д.).Как разобрать XML в javascript Nashorn engine?

Я tryied использовать модуль 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», но это может быть решение. Может быть, мы могли бы также использовать библиотеку «требовать» в Нашорне? Может быть, есть хорошая альтернатива модулю XMLDOM?

Любые предложения?

PS 1: Я tryied 'env.rhino.1.2.js' (http://www.envjs.com) как модуль XMLDOM alternive, но этот сценарий не может даже быть загружен Nashorn ...

PS 2: Я также tryied анализировать XML в Java и использовать результат в Javascript, но я не знаю, как преобразовать объект (у меня есть объект org.w3c.dom.Document, который вставлен, но это не то же самое, что и документ javascript dom. У меня, например, отсутствует метод gesDescendant или что-то в этом роде).

ответ

1

Nashorn поддерживает загрузку и loadWithNewGlobal примитивов.

«Нагрузка» загружает скрипт из URL-адреса, в текущую глобальную область.

'loadWithNewGlobal' загружает данный сценарий в новую глобальную область. Это позволит избежать загрязнения текущей глобальной области с помощью глобальных определений из загруженного файла/URL-файла сценария.

Дополнительная информация по этому вопросу находится в вики «openjdk nashorn extensions».

(Несвязанный), вы можете фактически анализировать XML-документы с использованием Java-парсеров API-интерфейсов, поскольку nashorn поддерживает вызов произвольного Java API из кода сценария. Вы можете делать преобразования, используя Object.bindProperties (другие расширения, задокументированные в nashorn wiki)

+0

Спасибо! К сожалению, простая загрузка dom-parser.js не выполняется (из модуля XMLDOM Node.js): 'var dpObj = loadWithNewGlobal (" src/main/resources/js/xmldom/dom-parser.js "); печати («dpObj:» + dpObj); ' Напечатает: dpObj не определено, не определено, не определено, не определено, ... Может быть, я должен попробовать ваше второе решение – user2668735

+0

Можете ли вы привести пример для XML разбора в java + привязка в javascript? Например, вы вводите код JS с помощью arg (java Dom Document) и должны вызвать функцию foo, в которой используется «Javascript Document». Для информации, все это для Blockly: идея состоит в том, чтобы сгенерировать JS-код на стороне сервера. Поскольку функции преобразования существуют только в JS, я должен выполнить JS-функцию внутри Nashorn. – user2668735