直接在一行更新的ActionScript XML对象中使用E4X? [英] Updating an actionscript xml object directly in one line using e4x?

查看:127
本文介绍了直接在一行更新的ActionScript XML对象中使用E4X?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

由于以下XML:

 <形式GT;
    < personalDetails>
        <名称>约翰和LT; /名称>
    < / personalDetails>
    < financeDetails>
        <收入>
            <薪水>百万< /工资和GT;
        < /收入>
    < / financeDetails>
< /形式GT;
 

我知道这是有可能创造上面​​的XML如下(这是非常酷):

  VAR的xml:XML =<形式/取代;
xml.personalDetails.name =约翰;
xml.financeDetails.income.salary = 1000000;
 

但是,如果我们不知道该节点的名称或多少级存在?我们可以使用下面的方法做到这一点,但它确实感觉应该有一个更简单,更好的方法来做到这一点:

  VAR的xml:XML =<形式/取代;
如updateXML(XML,personalDetails.name,约翰);
如updateXML(XML,financeDetails.income.salary,百万);

功能如updateXML(XML:XML,路径:字符串,数据:字符串):无效{

    变种nodesArray:数组= path.split(。);

    开关(nodesArray.length){

        情况1:
            xml的[nodesArray [0]] =数据;
            打破;

        案例2:
            xml的[nodesArray [0] [nodesArray [1]] =数据;
            打破;

        案例3:
            xml的[nodesArray [0] [nodesArray [1]] [nodesArray [2] =数据;
            打破;
    }
}
 

解决方案

好了,我不知道是否Flex有任何内置的机制来处理这样的情况(我不认为它),但我可以肯定的帮助你让你的功能更加灵活

 功能如updateXML(XML:XML,路径:字符串,数据:字符串):无效{
    变种nodesArray:数组= path.split(。);
    VAR tempXML:XML = XML;
    VAR tempXMLCandidate:XML;
    VAR标签名:字符串;
    对于(VAR我:= 0; I< nodesArray.length;我++){
        标签名= nodesArray [I]
        如果(ⅰ== nodesArray.length  -  1){
            tempXML [标签名] =数据;
        }其他{
            tempXMLCandidate = tempXML [标签名] [0];
            如果(!tempXMLCandidate){
                tempXMLCandidate =&≤{的tagName}取代;
                tempXML.appendChild(tempXMLCandidate);
            }
            tempXML = tempXMLCandidate;
        }
    }
}
 

我把但是我的手指穿过所以有人会帮助你一些内置的解决方案,我很好奇它自己。

干杯。

Given the following xml:

<form>
    <personalDetails>
        <name>John</name>
    </personalDetails>
    <financeDetails>
        <income>
            <salary>1000000</salary>
        </income>
    </financeDetails>
</form>

I know that is it possible to create the above xml as follows (which is very cool):

var xml:XML = <form />;
xml.personalDetails.name = "John";
xml.financeDetails.income.salary = 1000000;

However, what if we do not know the names of the nodes or how many levels exist? We can accomplish this using the method below but it really feels like there should be an easier, better way to do this:

var xml:XML = <form />;
updateXml(xml, "personalDetails.name", "John");
updateXml(xml, "financeDetails.income.salary", "1000000");

function updateXml(xml:XML, path:String, data:String):void {

    var nodesArray:Array = path.split(".");

    switch (nodesArray.length) {

        case 1: 
            xml[nodesArray[0]] = data;
            break;

        case 2:
            xml[nodesArray[0]][nodesArray[1]] = data;
            break;

        case 3:
            xml[nodesArray[0]][nodesArray[1]][nodesArray[2]] = data;
            break;
    }
}

解决方案

Well, I don't know if Flex has any build-in mechanism for dealing with such situation (I don't suppose it does) but I certainly can help you make your function more versatile

function updateXml(xml:XML, path:String, data:String):void {
    var nodesArray:Array = path.split(".");
    var tempXML:XML = xml;
    var tempXMLCandidate:XML;
    var tagName:String;
    for (var i:int = 0; i < nodesArray.length; i++){
        tagName = nodesArray[i];
        if (i == nodesArray.length - 1){
            tempXML[tagName] = data;
        }else{
            tempXMLCandidate = tempXML[tagName][0];
            if (!tempXMLCandidate){
                tempXMLCandidate = <{tagName}>;
                tempXML.appendChild(tempXMLCandidate);
            }
            tempXML = tempXMLCandidate;
        }
    }
}

I keep my fingers crossed however so someone would help you with some build-in solution, I'm curious about it myself.

Cheers.

这篇关于直接在一行更新的ActionScript XML对象中使用E4X?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆