如何为XML :: child()指定命名空间?

时间:2014-04-04 23:26:34

标签: xml actionscript-3 e4x

函数XML::child()接受一个Object参数来指定要获取的子元素的名称。
但是,如果有一个命名空间,似乎无法指定命名空间 我甚至尝试了XML::setNamespace()default xml namespace,但也没有尝试过 我使用E4X解决了这个问题,但它并不是我的首选。

XML:

<svg xmlns="http://www.w3.org/2000/svg">
  <path d= "..." />
  <anotherElement />
  <path d="..." />
</svg>  

AS

var svg: XML = new XML( svgData ); // read from the XML file above
var ns: Namespace = new Namespace( "http://www.w3.org/2000/svg" );
svg.setNamespace( ns ); // doesn't seem to help
default xml namespace = ns; // doesn't help either
var child:* = svg.child( "path" ); // how to specify namespace?
var child2:* = svg.ns:path; // works, but I'd rather use the XML class API

2 个答案:

答案 0 :(得分:1)

我已经用use namespace ns;尝试过,但这也没有帮助。但毕竟default xml namespace = ns 确实有所帮助:

        var svg:XML = 
            <svg xmlns="http://www.w3.org/2000/svg">
              <path d= "..." />
              <anotherElement />
              <path d="..." />
            </svg>;  

        var ns: Namespace = new Namespace( "http://www.w3.org/2000/svg" );

        default xml namespace = ns; // helps after all
        var child:XML = svg.child( "path" )[0];

        trace(child.toXMLString());
        // -> outputs <path d="..." xmlns="http://www.w3.org/2000/svg"/>

svg.child("path")给出一个包含<path ... />条目的XMLList;我刚刚更改了你的代码,只输出了第一项。

我已经在Flash Builder 4.7中使用AIR SDK 3.8

尝试了这一点

答案 1 :(得分:0)

您正在处理default命名空间,对于此类任务,您可以使用default xml namespace指令:

var myNamespace:Namespace = new Namespace("http://www.w3.org/2000/svg");
default xml namespace = myNamespace;

//dealing with XML

default xml namespace = "";