2009-03-05 73 views
2

我正在编写一个使用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 &amp; Stylus  <artist>Statik, Jahsonic &amp; Stylusre /> 
    </Song> 
</result> 

见该标签?如果我这样做,我想跳过整首歌并拿到下一首。

有什么办法可以做到这一点?

回答

1
  1. 写入web服务提供者。告诉他们有关格式不正确的XML。他们可能只是修复它。
  2. 当格式错误的XML被传回时,Flex的默认XML解码器不知所措。
  3. 如果你想尝试处理你自己的解码器。查看HTTPServicexmlDecode会员。
+0

1.我已经做过。我只是想快速修复我的代码,因为我不知道他们什么时候会修复它。 2.我注意到了。 :) 3.我会研究,但我没有使用HTTPService,我使用我自己的URLLoader实现。 – leolobato 2009-03-05 20:04:24

+0

在这种情况下,您需要完整事件的自定义处理程序。 – dirkgently 2009-03-05 20:27:58

1

Beautiful Soup这样做,但它是用Python编写的。你当然可以总是从源头上挖掘,看看他们是如何实现它的。

1

如果错误类的数量很少,请预处理XML以删除错误,然后将其交给解析器。这将使您能够在解决问题时轻松地移除解决方法。在上述情况下,您可以将文件加载为文本,查找带有重复标签的节点,然后从XML文本中删除整个节点。

或者只是通知Web服务提供商并等待 - 如果他们返回格式错误的XML,几乎每个解析器都会窒息,应该有动力尽快修复它。

1

不,您不能忽略具有普通XML解析器的格式错误的XML文档的一部分。这就像要求Flex编译器忽略语法错误并找出编码器的真正意图。你将不得不编写你自己的解析器,试图推断什么是畸形,什么可以忽略。老实说,任何发送错误XML的Web服务,即使是测试版都是不可靠的。这意味着他们正在编写XML“手工”而不是使用程序化类。任何人都可能会犯很多其他错误,尤其是回归。你的时间太过宝贵,不能依赖于他们。

干杯