2012-03-16 71 views
1

我试图在Adobe Flex 4.6中生成XML文件。这是我的代码。Adob​​e Flex - 生成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

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

<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 
     } 
    } 
+0

这也工作。你认为这是一个错误吗?谢谢 – Chinthaka 2012-03-18 10:15:31

+0

是的,你是正确的,属性值是类的名称。你认为这是一个错误吗?再次感谢您的帮助。 – Chinthaka 2012-03-18 10:21:25

+0

我不能说这是否是有意的行为,但它似乎只有当你最后有[i]时才会发生。 – 2012-03-18 14:33:15

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); 

希望帮助之前把这个。

+0

感谢您的答复。是的,这是工作。 – Chinthaka 2012-03-18 10:10:46