【问题标题】:Is there a way to force XML to include closing tags when using toString() or toXMLString()?有没有办法在使用 toString() 或 toXMLString() 时强制 XML 包含结束标签?
【发布时间】:2014-03-25 21:26:04
【问题描述】:

当我将 XML 转换为字符串时,它会将空节点转换为单叶。有没有办法要求它使用结束标签而不是单例?

例如,这里是伪 ActionScript3:

var xml:XML = new XML("<XML><NODE/></XML>");

var output:String = xml.toXMLString();

跟踪(输出);

<XML>
   <NODE/>
</XML>

我想要的是:

<XML>
  <NODE></NODE>
</XML>

PS 我正在使用 AS3 和使用 E4X 的 Flash Player 12。

背景故事:
我正在生成 HTML 页面,然后通过 XML 验证器运行它,我希望它是有效的,并且它存在诸如 &lt;link&gt; 之类的问题,在样板中他们没有关闭标签,没有“/”。在其他情况下,我有div,当导出到 XML 字符串时,XML 类将这些重写为 &lt;div/&gt;,这会破坏 HTML 页面。有时,节点将为空。如果我在节点中放置一个空格或值,它将改变页面的布局。

因此,基本上,有几个原因可以使空节点不被写成单例是有益的。

【问题讨论】:

  • 你的最终目标是什么/你会如何使用
  • @GeorgeProfenza 这只是一个例子。我更新了 XML 示例。
  • 好的,假设你已经解决了这个问题,如何使用这个解决方案?例如,您会添加一些 HERE 吗?我不确定您为什么要按照您的要求做,仅此而已:)
  • 好的:)。我在操作中添加了问题背后的故事。
  • 谢谢,这样更容易理解 :) 你试过零宽度空间吗? (U+200B) ?

标签: xml actionscript-3 flash apache-flex e4x


【解决方案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>")

参考文献

【讨论】:

  • 有趣...我将不得不验证这一点。这可能很棒。 :)
【解决方案2】:

看来这是不可能的。它可能需要 Flash Player 团队的更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 2019-03-14
    • 2021-07-02
    • 2010-12-26
    相关资源
    最近更新 更多