我如何操作xml的元素使用actionscript

时间:2012-02-07 13:41:15

标签: xml actionscript-3 xml-parsing

<fpdl:StartNode Id="Goods_Deliver_Process.START_NODE" Name="START_NODE" DisplayName="">
    <fpdl:ExtendedAttributes>
        <fpdl:ExtendedAttribute Name="FIRE_FLOW.bounds.height" Value="20"/>
        <fpdl:ExtendedAttribute Name="FIRE_FLOW.bounds.width" Value="20"/>
        <fpdl:ExtendedAttribute Name="FIRE_FLOW.bounds.x" Value="11"/>
        <fpdl:ExtendedAttribute Name="FIRE_FLOW.bounds.y" Value="117"/>
    </fpdl:ExtendedAttributes>
</fpdl:StartNode>

fpdl是xml的命名空间,我如何通过使用actionscript来操作xml的元素。我尝试使用example。[“fpdl:ExtendedAttribute”]来访问元素,但它不起作用。< / p>

感谢。

3 个答案:

答案 0 :(得分:0)

在ActionScript中使用E4X访问XML并使用命名空间起初有点棘手。这是一个快速的解决方案,可以帮助你。

http://www.cafesilencio.net/blog/accessing-xml-with-namespaces-in-as3-flex-air

答案 1 :(得分:0)

您可以使用Namespace实例和范围解析运算符::。这是一个例子:

package 
{
    import flash.display.Sprite;
    import flash.events.Event;

    public class Main extends Sprite 
    {

        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);

        }// end function

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);

            var xml:XML = 
            <root xmlns:ns="http://www.namespace.com/ns" >
                <ns:parent value="parent">
                    <ns:child>child</ns:child>
                </ns:parent>
            </root>;

            var ns:Namespace = new Namespace("http://www.namespace.com/ns");
            trace(xml.ns::parent.@value); // output: parent
            trace(xml.ns::parent.ns::child); // output: child

        }// end function

    }// end class

}// end package

答案 2 :(得分:0)

这是一个更完整的AS3 XML命名空间手册。

var data:XML = <fpdl:StartNode Id="Goods_Deliver_Process.START_NODE" Name="START_NODE" DisplayName="" xmlns:fpdl="http://google.com">
    <fpdl:ExtendedAttributes>
        <fpdl:ExtendedAttribute Name="FIRE_FLOW.bounds.height" Value="20"/>
        <fpdl:ExtendedAttribute Name="FIRE_FLOW.bounds.width" Value="20"/>
        <fpdl:ExtendedAttribute Name="FIRE_FLOW.bounds.x" Value="11"/>
        <fpdl:ExtendedAttribute Name="FIRE_FLOW.bounds.y" Value="117"/>
    </fpdl:ExtendedAttributes>
</fpdl:StartNode>;

// define namespace if you know its URL
var ns:Namespace = new Namespace("http://google.com");      
trace(data.ns::ExtendedAttributes.length());

// get namespace from document
ns = data.namespace("fpdl");                                
trace(data.ns::ExtendedAttributes.length());

// get default namespace from document
ns = data.namespace();                                      
trace(data.ns::ExtendedAttributes.length());

// set default namespace to use
default xml namespace = ns;
trace(data.ExtendedAttributes.ExtendedAttribute.length()); // see, no ns:: stuff

就个人而言,我发现默认的xml namespace = ns; 非常难看。