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

抱歉,我花了这么长时间才回复你,因为我相信你昨天可能需要它。
我今天在路上走了 8 个小时。
编写内联 XMLrequires使用单个root node来定义 XML 文档的正文。
您的第一个问题是您用单引号包裹了所有内容。取出来参数不是字符串。
如上所述,您的其他问题需要用根标签包装。
这段代码在 flash cs4 中编译得很好,如果你仍然不能让它工作,请告诉我。
请注意,在下面的代码中,我从不引用根节点。

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 回答