Adobe Flex - создать файл XML - PullRequest
1 голос
/ 16 марта 2012

Я пытаюсь создать файл XML в Adobe Flex 4.6.Это мой код.

    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 ]

2 голосов
/ 16 марта 2012

Интересно.Я проверил ваш код и получил тот же результат, хотя я не ожидал:

<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 голос
/ 16 марта 2012

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

Надеюсь, это поможет.

...