如何解析/忽略格式错误的XML部件?
问题描述:
我正在编写一个使用beta web服务API的Air应用程序。有时候,这个API返回给我一个格式不正确的XML节点,当我尝试从其中创建XML对象时,actionscript会引发错误。如何解析/忽略格式错误的XML部件?
我一直在做的只是尝试/捕捉结果,并忽略整个响应,如果XML是坏的,但我可以忽略格式错误的节点。
例如:
<result>
<Song>
<location>http://www.anyurl.com/audio/loftparty092108_pt4.mp3</location>
<title>Phonte party @ The Loft, 9/21/08 (pt. 4)</title>
<artist>Statik, Jahsonic & Stylus <artist>Statik, Jahsonic & Stylusre />
</Song>
</result>
见该标签?如果我这样做,我想跳过整首歌并拿到下一首。
有什么办法可以做到这一点?
答
- 写入web服务提供者。告诉他们有关格式不正确的XML。他们可能只是修复它。
- 当格式错误的XML被传回时,Flex的默认XML解码器不知所措。
- 如果你想尝试处理你自己的解码器。查看
HTTPService
的xmlDecode
会员。
答
如果错误类的数量很少,请预处理XML以删除错误,然后将其交给解析器。这将使您能够在解决问题时轻松地移除解决方法。在上述情况下,您可以将文件加载为文本,查找带有重复标签的节点,然后从XML文本中删除整个节点。
或者只是通知Web服务提供商并等待 - 如果他们返回格式错误的XML,几乎每个解析器都会窒息,应该有动力尽快修复它。
答
不,您不能忽略具有普通XML解析器的格式错误的XML文档的一部分。这就像要求Flex编译器忽略语法错误并找出编码器的真正意图。你将不得不编写你自己的解析器,试图推断什么是畸形,什么可以忽略。老实说,任何发送错误XML的Web服务,即使是测试版都是不可靠的。这意味着他们正在编写XML“手工”而不是使用程序化类。任何人都可能会犯很多其他错误,尤其是回归。你的时间太过宝贵,不能依赖于他们。
干杯
1.我已经做过。我只是想快速修复我的代码,因为我不知道他们什么时候会修复它。 2.我注意到了。 :) 3.我会研究,但我没有使用HTTPService,我使用我自己的URLLoader实现。 – leolobato 2009-03-05 20:04:24
在这种情况下,您需要完整事件的自定义处理程序。 – dirkgently 2009-03-05 20:27:58