【问题标题】:Failed to copy Xml as3复制 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 魔术。非常感谢。我是新来的,你能告诉我如何将你的答案标记为更正。再次感谢:)
  • 您无法将评论标记为已接受,但您可以对其进行投票。
  • 如何投票?选项在哪里?

标签: xml actionscript-3 flash clone


【解决方案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 中提供的 XML copy(),因此您不必像这样重新解析 XML。
猜你喜欢
  • 2012-12-17
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
  • 2014-09-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-10
  • 1970-01-01
相关资源
最近更新 更多