我正在编写一个使用beta webservice API的Air应用程序。有时这个API会让我感觉格式错误的XML节点,当我尝试从中创建XML对象时,actionscript会引发错误。

我一直在做的只是尝试/捕获结果并忽略整个响应,如果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. 写信给网络服务提供商。告诉他们有关格式错误的XML。他们可能只是解决它。
  2. 当传回格式错误的XML时,Flex的默认XML解码器会丢失并抛出。
  3. 如果您想尝试处理自己的解码器。请参阅 xmlDecode HTTPService 的成员。

其他提示

Beautiful Soup 执行此操作,但它是用Python编写的。你当然可以总是深入挖掘资源,看看他们是如何实现的。

如果错误类的数量很少,请预处理XML以删除错误,然后将其交给解析器。这将使您能够在问题得到解决后轻松删除解决方法。在上面的例子中,您将文件作为文本加载,查找具有重复标记的节点,然后从XML文本中删除整个节点。

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

不,您不能使用普通的XML解析器忽略格式错误的XML文档的一部分。这就像要求Flex编译器忽略语法错误并找出编码器真正意图做的事情。您将不得不编写自己的解析器,尝试推断出哪些错误以及可以忽略的内容。

老实说,任何发送错误XML的Web服务,甚至是测试版都不可靠。这意味着他们正在“手工”组成XML。而不是使用程序化的类。任何人这样做都可能会产生许多其他错误,尤其是回归。你的时间太宝贵了,无法依赖它们。

干杯

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top