[JS, Rhino] DOM support
В Rhino все java-библиотеки доступны, в чем проблема?
А там нет E4X?
Собственно можно редактировать только тело скрипта.
Во, спасибо, есть. А то я уже собрался вот эту хрень тащить внутрь:
в русской википедии пример ржачный:
Собственно можно редактировать только тело скрипта.А что еще есть у скрипта кроме тела?
Что-то у них парсер спотыкается на такой ерунде как &ndash   « » и пр.
Ну там XML-парсер, в нём нет всех этих entity. И задать кажется нельзя. E4X всё-таки заброшен…
Ну, что поделаешь - заменю на распарсю, преобразую, .toString(), а потом обратно заменю.
var selector = myXMLList..@myAttributeName;
selector[0] = 'test'; // - а вот присвоить отсюда нельзя. (или можно?)
ок, тогда выберем все элементы (благо такой атрибут содержат только один тип элементов):
var selector = myXMLList..myElementName
for (var i in selector )
selector[i].@myAttributeName = transform(selector[i].@myAttributeName);
Но тут другая бяка вылазит - если рутовый элемент в XMLList является myElementName, то в селектор он не попадает. Пока что ничего не придумал, кроме как обернуть всё в <test>...</test>, а потом просто взять .childs()
Но это как-то не здорово. Может кто подскажет, как распрямить клешни?
var xml = <a x="foo">
<b x="bar"/>
</a>;
Writer.write(xml.toXMLString() + '\n');
var attrs = xml..@x;
for (var i = 0; i < attrs.length(); i++) {
attrs[i] = 'n' + i;
}
Writer.write(xml.toXMLString());
<a x="foo">
<b x="bar"/>
</a>
<a x="n0">
<b x="n1"/>
</a>Bye!
P.S.
<dependency>
<groupId>rhino</groupId>
<artifactId>js</artifactId>
<version>1.7R3</version>
</dependency>
Ну может у тебя слишком старый или слишком новый. Я вообще не знаю какая у меня версия
вроде последняя версия 1.7R4, так что я хз.
var xml = <a x="foo">
<a x="bar"/>
</a>;
var attrs = xml..a;
for (var i = 0; i < attrs.length(); i++) {
attrs[i].@x = 'n' + i;
}
Alert(xml.toXMLString());
у меня
---------------------------
Alert
---------------------------
<a x="foo">
<a x="n0"/>
</a>
---------------------------
ОК Отмена
---------------------------
То же самое. Ну ты же нашёл решение с оборачиванием в тег
Сейчас только два типа элементов содержит атрибут, а теоретически их может быть больше. Завёл им жиру, посмотрю, что ответят.
xml..*.(@x) // такой у меня не заработал
xml..*.(function::attribute('x')) // выбрал все элементы у которых есть атрибут x
ни одна не взлетела - все ошибку "компиляции" выдают.
Оставить комментарий
kill-still
Есть среда, в которой можно выполнять скрипты, написанные на javascript. Выполняются они на Rhino. Появилась необходимость работать в этих скриптах с XML в виде DOM-а. Можете что-нибудь посоветовать?