2009-09-30 2 views

ответ

-2
function parseXML (xml) { 
    try { // normal browsers 
     return (new DOMParser()).parseFromString(xml, "application/xml"); 
    } 
    catch (e) { // IE 
     var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
     xmlDoc.async = "false"; 
     xmlDoc.loadXML(xml); 
     return xmlDoc; 
    } 
} 

Вы можете прочитать на DOMParser и объект Microsoft.XMLDOM ActiveX.

+2

Извините, но это то, что я хотел сделать, прежде чем искать другое решение: класс DOMParser не существует в JSFL, и я выполняю кросс-платформенный скрипт, поэтому использование ActiveX не допускается. – Klaim

1

Если JSFL использует ActionScript в какой-то момент, вы можете просто сделать XML(xml_string) или XMLList(multiple_xml_nodes_string), если это ActionScript 3.0 или выше. ActionScript 3.0 поддерживает E4X, ведь это собственный XML в ECMAScript.

+0

Я попробую это однажды вернуться к работе, но я не думаю, что это будет работать, поскольку jsfl-файлы - это Javascript, а не файлы ActionScript. Много сходств, но различия тоже. Я все равно попробую и сообщит тогда. – Klaim

+2

@ Klaim u может анализировать xml с помощью e4x с помощью jsfl (http://robertpenner.com/flashblog/2007/08/jsfl-updated-to-javascript-16-gains-e4x.html) –

2

Ну, вы можете использовать XML и E4X прямо из JSFL с использованием Flash CS3 или более поздней версии, как Javascript engine got upgraded to 1.6

Вот краткий фрагмент кода, который перебирает элементы в текущем выделении и прослеживает XML:

var doc = fl.getDocumentDOM();//get the current document ref. 
var selection = doc.selection;//get the selection 
var layout = <layout />;//create the root node for our xml 
var elementsNum = selection.length;//store this for counting* 
for(var i = 0 ; i < elementsNum ; i++){ 
    layout.appendChild(<element />);//add an element node 
    layout.element[i][email protected] = selection[i].name;//setup attributes 
    layout.element[i][email protected] = selection[i].x; 
    layout.element[i][email protected] = selection[i].y; 
} 
fl.trace(layout); 
+0

Конденсированная версия выше: 'var s = fl.getDocumentDOM(). selection; var xml = ; for (var i = 0; i ); fl.trace (xml); ' –

0

То, что хорошо работает для меня, - это просто создание SwfWindow. Работать в JSFL приятно и быстро, потому что вы можете изменить файл без перезапуска Flash, но часто ActionScript дает вам больше возможностей.

Мой текущий проект делает пару трюков:

  1. я буду создавать объекты в JSFL, а затем преобразовать их в XML. Я должен сериализовать их из формата Object в строку, которую я передаю SwfWindow (Panel). Из панели я беру String, чтобы преобразовать ее в XML. Затем вы можете делать все, что хотите, в ActionScript 3.0.

  2. Если у меня просто есть обработка XML, я буду запрашивать у пользователя путь к файлам XML в коде JSFL, но передайте URL-адрес непосредственно на Panel и попросите Panel просто загрузить XML напрямую.

  3. И наконец. Для сохранения XML мне придется преобразовать XML в строку через «xml.toXmlString()», но вам также нужно удалить «\ n», чтобы вы могли передать данные JSFL. Я вычеркнул '\ n' для '|' или как вам угодно. Затем передайте строку в JSFL, и затем вы можете десериализовать строку и изменить '|' назад в '\ n' и сохраните файл. Либо используйте более старый метод «Сохранить выходную панель», либо используйте новый метод записи файлов.

Надеюсь, что это поможет.

+0

Я тоже это делал, но мне проще использовать XML/E4X в JSFL, просто я бы использовал в as3.0. xml.toXmlString() помогает получать вещи туда и обратно, не используя Object –

+0

Я заметил, что JSFL имеет тенденцию быть очень медленным, и поэтому я предпочитаю использовать AS3 и SwfWindow. Но, честно говоря, в эти дни я пишу больше инструментов в эфире. – haysclark

3

Я знаю, что это старый вопрос, но я искал также решение этой проблемы (используя Flash CS3). Мне нужно было разобрать XML из файла данных на диске. Объединив suggestion of George Profenza, мне удалось заставить его работать с использованием eval(). Ключ должен удалить первую строку (декларация xml):

xmlData = eval(FLfile.read(xmlFile).split('\n').slice(1).join('\n')); 

... и вы готовы к работе!

+0

Спасибо, что отправил этот ответ - старался не везет! – xdl

1
var xml = new XML(FLfile.read(file)); 

Тогда вы можете получить доступ ко всем узлам и атрибутам написав это:

xml.nodeName 
[email protected] 
[email protected] 

NODENAME это имя вашего узла. атрибут1 должен быть именем вашего атрибута.

Надеюсь, это поможет.