有没有办法在使用toString()或toXMLString()时强制XML包含结束标记?

时间:2014-03-25 21:26:04

标签: xml actionscript-3 flash flex e4x

当我将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页面。有时,节点将为空。如果我在节点中放置空格或值,它将改变页面的布局。

所以基本上,有一些原因可以保持空节点不被写为单例,这将是有益的。

2 个答案:

答案 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团队的更新。