Adobe Flex - 生成XML文件

时间:2012-03-16 16:26:32

标签: xml flash flex air adobe

我正在尝试在Adobe Flex 4.6中生成XML文件。这是我的代码。

    public var prefsFile:File;
    [Bindable] public var prefsXML:XML;
    public var stream:FileStream;

private function createXMLData():void 
{
        var location:String = "";
        prefsXML = <root/>;

        var i:int = 0;
        if(photoList.length > 0){
                for(i; i< photoList.length; i++){
                   prefsXML.P[i] = photoList[i]; //photoList is an array which contain names
            }
        }

        var outputString:String = '<?xml version="1.0" encoding="utf-8"?>\n';
        outputString += prefsXML.toXMLString();
        outputString = outputString.replace(/\n/g, File.lineEnding);

        trace("XML file: " + prefsXML.toXMLString());
        stream = new FileStream();
        stream.open(prefsFile, FileMode.WRITE);
        stream.writeUTFBytes(outputString);
        stream.close();
    }

这是我的输出。

<root>
  <P xmlns="views:AddDetails">16032012155637.jpg</P>
  <P xmlns="views:AddDetails">16032012155642.jpg</P>
</root>

我不知道在xmlns="views:AddDetails"标记内添加<P>的方法。

有人可以向我解释一下吗? 非常感谢

2 个答案:

答案 0 :(得分:2)

有趣。我测试了你的代码并得到了相同的结果,虽然我没想到:

<root>
  <P xmlns="Test_XMLNS">16032012155637.jpg</P>
  <P xmlns="Test_XMLNS">16032012155642.jpg</P>
</root>

对我来说,它将我的测试项目的名称添加为xmlns,因此我怀疑包含您的代码的类的名称是视图包中的AddDetails。

此外,只有在使用XML点运算符在特定索引处创建元素时才会发生这种情况 - 这种情况通常不会发生。也就是说,

prefsXML.P[i] = photoList[i];

导致添加xmlns,但

prefsXML.P = photoList[i];


在任何情况下,您都可以通过稍微不同的方式添加新元素来修复它:

    if(photoList.length > 0){
      for(i; i< photoList.length; i++){
        prefsXML.appendChild(<P>{photoList[i]}</P>); //photoList is an array which contain names
      }
    }

答案 1 :(得分:1)

默认情况下,XML采用文件的命名空间。

这是一个有点脏的修复,但它有效,把它放在var outputString:String =...

之前
var ns:Namespace = new Namespace();
var node:XML;
prefsXML.addNamespace(ns);
prefsXML.setNamespace(ns);
for each (node in prefsXML.descendants())
    node.setNamespace(ns);

希望有所帮助。