0

次のサンプル XML を指定します (ここではハードコードされていますが、通常は外部ファイルから読み込みます)。

var myXML:XML = new XML('
    <xmlout xmlns:ns1="http://some.namespace.com/ns1" xmlns:ns2="http://some.namespace.com/ns2" xmlns:ns3="http://some.namespace.com/ns3">
        <data>
            <item>
                <ns1:id>some_id</ns1:id>
            </item>
        </data>
    </xmlout>');

次のように、名前空間を名前空間オブジェクトとしてオブジェクトに格納しています。

var xmlNamespaces:Object = {};

for (var i:uint = 0; i < myXML.namespaceDeclarations().length; i++) {
    var ns:Namespace = myXML.namespaceDeclarations()[i]; 
    xmlNamespaces[ns.prefix] = new Namespace(ns.prefix, ns.uri);
}

私は次のようなことをしようとしています:

trace(myXML.data.item.xmlNamespaces["ns1"]::id.value);

これが可能かどうか、何か考えはありますか? 私は成功したことがありません。ありがとう!

編集:次を使用して、問題なくこれを実行できることに注意してください。

default xml namespace = xmlNamespaces.ns1;
var id:String = myXML.data.item.id;

私は特に、毎回デフォルトの名前空間を設定する必要をなくす方法を見つけようとしています...

4

1 に答える 1

0

Sorry this has been taking me so long to get back to you as I am sure you probably needed it yesterday.
I was on the road for 8 hours today.
Writing inline XML requires the use of a single root node to define the body of the XML document.
Your first issue is you wrapped everything with a single quote. Take it out the parameter is not a string.
Your other issue as stated above you need to wrap it with a root tag.
This code compiles fine in flash cs4 let me know if you still can't get that to work.
Notice in the code below I never reference the root node.

var myXML:XML = new XML(
    <root>
        <xmlout xmlns:ns1="http://some.namespace.com/ns1" xmlns:ns2="http://some.namespace.com/ns2" xmlns:ns3="http://some.namespace.com/ns3">
            <data>
                <item>
                    <ns1:id>some_id</ns1:id>
                </item>
            </data>
        </xmlout>
    </root>);


var xmlNamespaces:Object = {};

for (var i:uint = 0; i < myXML.xmlout.namespaceDeclarations().length; i++) {
    var ns:Namespace = myXML.xmlout.namespaceDeclarations()[i]; 
    trace(ns.prefix + ' ' + ns.uri)
    xmlNamespaces[ns.prefix] = new Namespace(ns.prefix, ns.uri);
}
// output is 
// ns1 http://some.namespace.com/ns1
// ns2 http://some.namespace.com/ns2
// ns3 http://some.namespace.com/ns3
于 2012-07-19T00:57:23.530 に答える