我正在尝试在Adobe Flex 4.6中生成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>
的方法。
有人可以向我解释一下吗? 非常感谢
答案 0 :(得分: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
}
}
答案 1 :(得分: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);
希望有所帮助。