复制 Xml as3 失败
Posted
技术标签:
【中文标题】复制 Xml as3 失败【英文标题】:Failed to copy Xml as3 【发布时间】:2016-07-03 08:52:58 【问题描述】:我正在处理我正在使用 XML 的 as3 项目。当我将 xml 对象复制到其他 (newxml=oldxml) 时遇到问题,文本被复制但是如果我从 oldxml 中删除一些节点它会自动删除来自复制变量 (newxml) 的节点。
删除节点代码:
for each( node in xmlold.links.slidelink.(@displaytext.toLowerCase().indexOf(this.searchbar.text.toLowerCase())<0))
var index = node.childIndex();
delete xmlold.links.slidelink[index];
this.display.text=xmlnew.toString();
现在当我显示“xmlnew”文本时,它会在删除不需要的文本后给我输出
Xml 看起来像:
<outline xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<links>
<slidelink slideid="_player" displaytext="Headd" <slidelink slideid="5pnZ9Eziqq4" displaytext="Relationship" expand="true" type="slide"/>
<slidelink slideid="vgVg68B" displaytext="Temperature Relationship" expand="true" type="slide"/>
<slidelink slideid="_player" displaytext="Viscosity" expand="true" type="slide"/>
</links>
</outline>
请检查问题您的帮助将不胜感激,谢谢
【问题讨论】:
newxml=oldxml
不会复制,它只是说“newxml 与 oldxml 相同”...您需要类似 newxml = new XML (oldxml);
的内容。您可以查看 google 或 AS3 手册,了解如何将 oldxml 数据传递到 newxml,但作为起点尝试var newxml : XML = new XML ( oldxml.toXMLString() );
并从那里开始解决任何问题
感谢您的建议,但这也不起作用请帮助我
解决了!你的把戏做了伟大的 Vc 魔术。非常感谢。我是新来的,你能告诉我如何将你的答案标记为更正。再次感谢:)
您无法将评论标记为已接受,但您可以对其进行投票。
如何投票?选项在哪里?
【参考方案1】:
复制 XML 结构的最佳方法是使用 XML/copy()
,这正是它的用途。
var newXML:XML = oldXML.copy();
【讨论】:
感谢您的建议,但问题已经解决了。这个解决方案也很好。 欢迎您接受任何答案,但您“应该”使用copy()
来复制 XML。使用new XML
会导致字符串解析开销大,非常慢,这也是API中提供XMLcopy()
的原因。
因此我的“您可以查看 AS3 手册,了解如何将 oldxml 数据传递到 newxml,但作为起点尝试...”无论哪种方式都会为提问者提供相同的结果。检查 toXMLString 你可以看到它复制数据(复杂与否)..
@VC.One 不同之处在于toXMLString()
将XML 转换为String,然后XML()
将整个XML 字符串解析回XML。这既缓慢又毫无意义,您应该避免重新解析,这正是copy()
存在的原因。这就像使用 a = JSON.parse(JSON.stringify(b))
而不是 a = b.copy()
。
@Aaron,请原谅我一周没有登录的迟到的回复。我对此的最终决定是..我不相信它“非常缓慢和昂贵”(它甚至不应该有点慢)。我认为您高估解析 XML 的复杂性和 低估 CPU 处理 UTF 编码文本的能力。跟踪原始XML
并将其与XML.copy
的跟踪和toXMLString
的跟踪进行比较。所有 3 个看起来完全相同,并且在内存中将保持不变。重复/处理任何内存数据对于计算机来说都是即时的。【参考方案2】:
newxml=oldxml
不复制,它只是说“newxml 与 oldxml 相同”。
你需要像newxml = new XML (oldxml);
这样的东西
作为起点尝试:
var newxml : XML = new XML ( oldxml.toXMLString() );
【讨论】:
这行得通,但它不必要地昂贵。将您的 XML 转换为字符串然后将字符串解析回 XML 非常慢。您应该只使用 API 中提供的 XMLcopy()
,因此您不必像这样重新解析 XML。以上是关于复制 Xml as3 失败的主要内容,如果未能解决你的问题,请参考以下文章