利用可能なJSFL(Adobe Flash-extension Javascriptスクリプトファイル)にxml解析ツールがないようです:http://osflash.org/pipermail/flashextensibility_osflash.org/2006-July/000014.html
では、javascript xmlパーサーを追加する簡単でクロスプラットフォームの方法はありますか?
利用可能なJSFL(Adobe Flash-extension Javascriptスクリプトファイル)にxml解析ツールがないようです:http://osflash.org/pipermail/flashextensibility_osflash.org/2006-July/000014.html
では、javascript xmlパーサーを追加する簡単でクロスプラットフォームの方法はありますか?
これは古い質問ですが、この問題の解決策も探していました(Flash CS3を使用)。ディスク上のデータファイルからXMLを解析する必要がありました。George Profenzaの提案を組み合わせて、を使用して動作させることができましたeval()
。重要なのは、最初の行(xml宣言)を削除することです。
xmlData = eval( FLfile.read( xmlFile ).split( '\n' ).slice( 1 ).join( '\n' ) );
...そしてあなたは行ってもいいです!
var xml = new XML(FLfile.read(file));
次に、次のように記述して、すべてのノードと属性にアクセスできます。
xml.nodeName
xml.nodeName.@attribute1
xml.nodeName.@attribute2
nodeName はノードの名前です。attribute1 は、属性の名前である必要があります。
これが役立つことを願っています。
Javascript エンジンが 1.6 にアップグレードされたため、Flash CS3 以降を使用して JSFL から XML と E4X を直接使用できます。
以下は、現在の選択範囲内の要素をループして 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].@name = selection[i].name;//setup attributes
layout.element[i].@x = selection[i].x;
layout.element[i].@y = selection[i].y;
}
fl.trace(layout);
私にとってうまくいくのは、SwfWindow を作成することだけです。JSFL での作業は、Flash を再起動せずにファイルを変更できるので便利で高速ですが、多くの場合、ActionScript の方が強力です。
私の現在のプロジェクトは、いくつかのトリックを行います。
JSFL でオブジェクトを作成し、それらを XML に変換します。オブジェクト形式から SwfWindow (パネル) に渡す文字列にシリアル化する必要があります。パネルから、XML に変換できる文字列を取得します。そうすれば、Actionscript 3.0 でやりたいことが何でもできます。
XML を操作するだけの場合は、ユーザーに JSFL コードで XML ファイルのパスを入力するように求めますが、URL をパネルに直接渡し、パネルに XML を直接ロードさせるだけです。
ついに。XML を保存するには、「xml.toXmlString()」を使用して XML を文字列に変換する必要がありますが、データを JSFL に渡せるように「\n」も削除する必要があります。'|' の '\n' を取り除きます。またはあなたが好きなもの。次に、文字列を JSFL に渡すと、文字列を逆シリアル化し、'|' を変更できます。'\n' に戻り、ファイルを保存します。古い「出力パネルの保存」メソッドを使用するか、新しいファイル書き込みメソッドを使用します。
それが役立つことを願っています。
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 オブジェクトの詳細を読みたいと思うかもしれません。