2009-09-30 14 views

Répondre

-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; 
    } 
} 

Vous pouvez en savoir plus sur DOMParser et l'objet ActiveX Microsoft.XMLDOM.

+2

Désolé, mais c'est ce que je voulais faire avant de chercher une autre solution: la classe DOMParser n'existe pas dans JSFL et je fais un script multi-plateforme donc l'utilisation d'ActiveX n'est pas autorisée. – Klaim

1

Si JSFL utilise ActionScript à un moment donné, vous pouvez simplement faire XML(xml_string) ou XMLList(multiple_xml_nodes_string) tant que c'est ActionScript 3.0 ou supérieur. ActionScript 3.0 prend en charge E4X qui est XML natif dans ECMAScript.

+0

Je vais essayer cela une fois de retour au travail mais je ne pense pas que cela fonctionnera car les fichiers jsfl sont des fichiers Javascript et non des fichiers ActionScript. Beaucoup de similitudes mais aussi des différences. Je vais essayer de toute façon et de signaler ensuite. – Klaim

+2

@Klaim vous pouvez analyser xml avec e4x en utilisant jsfl (http://robertpenner.com/flashblog/2007/08/jsfl-updated-to-javascript-16-gains-e4x.html) –

2

Eh bien, vous pouvez utiliser XML et E4X directement à partir JSFL avec Flash CS3 ou plus récent que le Javascript engine got upgraded to 1.6

Voici un extrait rapide que les boucles à travers des éléments dans la sélection actuelle et trace 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

Une version condensée de ce qui précède: 'var s = fl.getDocumentDOM(). sélection; var xml = ; pour (var i = 0; i ); fl.trace (xml); ' –

0

Ce qui fonctionne bien pour moi, c'est juste de créer une SwfWindow. Travailler dans JSFL est agréable et rapide car vous pouvez changer le fichier sans avoir à redémarrer Flash, mais souvent ActionScript vous donne plus de puissance.

Mon projet actuel fait un tricks couple:

  1. Je vais créer des objets dans JSFL puis les convertir en XML. Je dois les sérialiser du format d'objet dans une chaîne que je passe à la SwfWindow (panneau). Du panneau, je prends la chaîne peut le convertir en XML. Ensuite, vous pouvez faire tout ce que vous voulez dans Actionscript 3.0. Si je n'ai qu'une manipulation XML, je vais demander à l'utilisateur un chemin d'accès aux fichiers XML dans le code JSFL, mais remettre l'URL directement au Panel, et demander au Panel de charger directement le XML.

  2. Enfin. Pour sauvegarder le XML, je vais devoir convertir le XML en chaîne via 'xml.toXmlString()', mais vous devez également supprimer le '\ n' pour que vous puissiez transmettre les données à JSFL. Je vais enlever le '\ n' pour '|' ou comme tu veux. Puis passez la chaîne à JSFL, et vous pouvez ensuite désérialiser la chaîne et changer le '|' Retour à '\ n' et enregistrez le fichier. Soit en utilisant l'ancienne méthode "Enregistrer le panneau de sortie", soit en utilisant la nouvelle méthode d'écriture de fichier.

Espérons que ça aide.

+0

J'avais l'habitude de faire cela aussi, mais je trouve qu'il est plus facile d'utiliser XML/E4X dans JSFL que je voudrais utiliser dans AS3.0. xml.toXmlString() permet de faire des va-et-vient sans utiliser l'objet –

+0

J'ai remarqué que JSFL a tendance à être super lent, ce pourquoi je préfère utiliser AS3 et un SwfWindow. Mais pour être honnête, ces jours-ci j'ai écrit plus d'outils dans Air. – haysclark

3

Je sais que c'est une vieille question, mais je cherchais aussi une solution à ce problème (en utilisant Flash CS3). J'avais besoin d'analyser XML à partir d'un fichier de données sur disque. En combinant le suggestion of George Profenza, j'ai réussi à l'utiliser avec eval(). La clé est de supprimer la première ligne (la déclaration xml):

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

... et vous êtes prêt à partir!

+0

Merci de poster cette réponse - essayé sans chance depuis des lustres! – xdl

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

Ensuite, vous pouvez accéder à tous vos nœuds et attributs en écrivant ceci:

xml.nodeName 
[email protected] 
[email protected] 

nodeName est le nom de votre noeud. L'attribut1 devrait être le nom de votre attribut.

J'espère que cela aide.