2012-03-16 75 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