2012-03-16 17 views
1

Adob​​e 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

+0

はい、あなたは正しいです、属性値は、クラスの名前です。これはバグだと思いますか?もう一度ありがとう、これは私を助けます。 – Chinthaka

+0

私はこれが意図された行動かどうかは言えませんでしたが、最終的に[i]があるときだけ起こることは疑わしいと思われます。 –

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

関連する問題