给定以下示例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;
我特别想弄清楚如何消除每次都必须设置默认名称空间的情况。。。
很抱歉,我花了很长时间才给你回复,因为我确信你昨天可能需要它
今天我在路上走了8个小时
编写内联XML requires
—使用单个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