0

ノード内でxmlを生成できないようです。毎回 xml 構造全体を繰り返します。使用例は、このファイルが数時間または数日にわたって繰り返し更新されることです。この xml ファイルはバックエンドにも接続するため、この形式にしておくことが重要です。

現在、xml は次のようになります。

<xmlcontainer>
  <details>
    <name>name</name>
    <phone>phone</phone>
    <email>email</email>
    <image>0</image>
    <image>1</image>
  </details>
</xmlcontainer><xmlcontainer>
  <details>
    <name>name2</name>
    <phone>phone2</phone>
    <email>email2</email>
    <image>3</image>
    <image>4</image>
  </details>
</xmlcontainer>

このように見えるとき。

<xmlcontainer>
  <details>
    <name>name</name>
    <phone>phone</phone>
    <email>email</email>
    <image>0</image>
    <image>1</image>
  </details>
  <details>
    <name>name2</name>
    <phone>phone2</phone>
    <email>email2</email>
    <image>3</image>
    <image>4</image>
  </details>
</xmlcontainer>

以下は私のコードで、2 つのフレームにまたがっています。これを実現している何が欠けていますか?私は fs.open(fl2,FileMode.APPEND); を台無しにしました。および fs.open(fl2,FileMode.WRITE); しかし、大きな違いはないようです。

ありがとう

//frame 2
var xml_file = File.documentsDirectory.resolvePath('app/information.xml').nativePath;

    var xml_created = false;
    var xml_data = "";

    function load_xml(f_name){
      var target_url:URLRequest = new URLRequest(f_name);
      var target_load:URLLoader= new URLLoader();
      var xmlData : XML = new XML();
      target_load.load(target_url);
      target_load.addEventListener(Event.COMPLETE, target_complete);
      target_load.addEventListener(IOErrorEvent.IO_ERROR, target_error);

      function target_complete (evt:Event):void {
        xmlData = new XML(evt.target.data);
        xml_created = true;
        xml_data = String(xmlData.details);
        nextFrame();
        trace("OK - load XML")
      }

      function target_error(evt:IOErrorEvent):void {
        nextFrame();
        trace("ERROR - load xml - check xml file name");
      }

    }

    load_xml(xml_file);

//frame 5
function saveFiles_fun (){
  var xmlData:XML = new XML(<xmlcontainer>
  </xmlcontainer>
  );

  var details:XML = new XML(<details/>)
  //client.appendChild(<id/>);
  details.appendChild( new XML( "<name>qwe</name>" ));
  details.appendChild( new XML( "<phone>qwe</phone>" ));
  details.appendChild( new XML( "<email>qwe</email>" ));

  for (var fna:int = 0; fna<fileNameArray.length; fna++) {
    details.appendChild( new XML( "<image>" + fna + "</image>" ));
  }

  xmlData.appendChild(details);

  var fl1:File = File.applicationDirectory.resolvePath(xml_file);
  var fl2:File = new File( fl1.nativePath );

  var fs:FileStream = new FileStream();
  try{
    fs.open(fl2,FileMode.APPEND);
    fs.writeUTFBytes(xmlData);
    fs.close();
    doSomething();
  }catch(e:Error){}
}


function doSomething(){
 form.alert.text = alert4;
 var _tim5 = setTimeout(gotoAndPlay, 1000,1);
}
4

2 に答える 2

1

あなたの問題はこの行にあるように私には見えます。

fs.open(fl2,FileMode.APPEND);

ファイルを完全に再作成してから、既存のファイルに上書きしないのはなぜですか?


FileMode.APPEND

ファイルを追加用に開いていることを指定します。ファイルが存在しない場合は作成されます。ファイルが存在する場合、既存のデータは上書きされず、すべての書き込みはファイルの最後から始まります。


使用する必要があるのは

FileMode.WRITE



また、関数をネストしないでください。これを一般的な方法にすると、問題が発生します。

[アップデート]

// in the code you supplied find this line
xmlData.appendChild(details);

// and right above it add this line
xmlData.appendChild(xml_data);

// so the resulting code will look like this
xmlData.appendChild(xml_data); // xml_data is where the original document is stored
xmlData.appendChild(details);

// also include the change to 
fs.open(fl2,FileMode.WRITE);
于 2012-06-08T03:10:56.600 に答える
0

「saveFiles_fun」メソッドが呼び出されている場所から? このコード スニペットを使用して XML の新しいインスタンスを作成していると思います。

var xmlData:XML = new XML( );

次に、childXML を追加します。

于 2012-06-08T05:31:43.077 に答える