>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Странная работа с E4X + DOMParser http://forum.mozilla-russia.org/viewtopic.php?id=38356 |
Infocatcher > 10-08-2009 02:55:10 |
Простой пример: Выделить код Код:<?xml version="1.0"?> <?xml-stylesheet href="chrome://global/skin/" type="text/css"?> <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" align="center" title="E4X Text"> <script type="application/x-javascript"> <![CDATA[ function e4x() { var ns = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; var ml = <menulist xmlns={ns} />; var mp = <menupopup xmlns={ns} />; var c = 2; for(var i = 0; i < c; i++) mp.appendChild(<menuitem xmlns={ns} value={i} label={i} />); ml.appendChild(mp); ml.@value = "1"; document.documentElement.appendChild( new DOMParser().parseFromString(ml.toXMLString(), "application/xml").documentElement ); } function dom() { var ml = document.createElement("menulist"); var mp = document.createElement("menupopup"); var c = 2, mi; for(var i = 0; i < c; i++) { mi = document.createElement("menuitem"); mi.setAttribute("value", i); mi.setAttribute("label", i); mp.appendChild(mi); } ml.appendChild(mp); ml.setAttribute("value", "1"); document.documentElement.appendChild(ml); } ]]> </script> <button label="E4X" oncommand="e4x();" /> <button label="DOM" oncommand="dom();" /> </window> По идее, обе функции/кнопки должны создавать совершенно одинаковые menulist'ы. Впрочем, вот тут уже получалось нечто странное после Таки хотелось бы окончательно выяснить причину подобных безобразий. |
Anton > 11-08-2009 19:51:00 |
Не знаю на сколько регулярки универсальны, но Выделить код Код:ml = ml. toXMLString (). replace (/[\n\r]/g, ""); ml = ml. replace (/>\s+?</g, "><"); ml = new DOMParser().parseFromString(ml, "application/xml").documentElement; //ml = document. adoptNode (ml); // для XUL Runner document. documentElement. appendChild (ml); вместо Выделить код Код:document.documentElement.appendChild( new DOMParser().parseFromString(ml.toXMLString(), "application/xml").documentElement ); исправляет ситуацию для обоих указанных случаев. Видимо, плохо стилизуется из-за текстовых узлов. |
Infocatcher > 11-08-2009 20:10:23 |
Anton пишет
Хммм...
Это я находил, но не придал особого значения. 11-08-2009 20:10:43
11-08-2009 20:18:58
А ведь или я чего-то не понимаю, или не работает. А вот и решение, по-видимому: И, вроде бы, все Ok. P.S. А использование регулярок ставит под сомнение фактор быстродействия. |
Infocatcher > 11-08-2009 21:36:05 |
Поигрался. Ну, разве что смущает, что XML.prettyPrinting – это глобальное window.XML.prettyPrinting. И если код другого расширения был рассчитан на поведение по умолчанию, получится не очень здорово. Выделить код Код:var pp = XML.prettyPrinting; XML.prettyPrinting = false; ... xml.toXMLString() ... XML.prettyPrinting = pp; |