当我将XML转换为字符串时,它会将空节点转换为单个叶子。有没有办法要求它使用结束标签而不是单身人士?
例如,这里是伪ActionScript3:
var xml:XML = new XML("<XML><NODE/></XML>");
var output:String = xml.toXMLString();
跟踪(输出);
<XML>
<NODE/>
</XML>
我想要的是:
<XML>
<NODE></NODE>
</XML>
PS我使用的是使用E4X的AS3和Flash Player 12。
返回故事:
我正在生成HTML页面,然后通过XML验证器运行它,我希望它是有效的,它有<link>
之类的问题,在锅炉板中他们没有关闭标签,没有“/” 。我还有div
的其他情况,当导出到XML字符串时,XML类会将那些重写为<div/>
,从而打破HTML页面。有时,节点将为空。如果我在节点中放置空格或值,它将改变页面的布局。
所以基本上,有一些原因可以保持空节点不被写为单例,这将是有益的。
答案 0 :(得分:1)
使用override
方法重新定义toXMLString
:
override public function toXMLString():String
{
if (!localIndex)
{
return source.toXMLString();
}
else
{
var str:String = "";
for (var i:int = 0; i < localIndex.length; i++)
{
if (i > 0)
str += "\n"; // this matches how XML works
str += localIndex[i].toXMLString();
}
return str.replace("<NODE/>","<NODE></NODE>");
}
}
或者,更通用的版本:
return str.replace(/<([^\/]+)\/>$/,"<$1></$1>")
<强>参考强>
答案 1 :(得分:0)
似乎不可能。可能需要Flash Player团队的更新。