【问题标题】:Flex: Error message about "well-formed" markup, even though XML is well-formedFlex:关于“格式正确”标记的错误消息,即使 XML 格式正确
【发布时间】:2010-09-16 02:50:09
【问题描述】:

我正在阅读尝试从 ByteArray 加载 XML,如下所示:

var xmlString:String = myByteArray.readUTFBytes(numBytes);
var myXML:XML = new XML(xmlString);

当我这样做时,当我在 Flash Player 9 中运行时,我在 XML 构造函数上收到以下运行时错误:

TypeError:错误 #1088:文档中根元素之后的标记必须格式正确。

在 Flash Player 10 中不会出现此错误消息。我可以使用调试器来验证 XML 是否格式正确。 XML 格式为 UTF-8。

【问题讨论】:

    标签: xml apache-flex flash


    【解决方案1】:

    对我来说这个特殊问题的解决方案是在文件的开头有一个不必要的Byte Order Mark,我必须删除它。使用十六进制编辑器检查文件后,我看到以下内容是文件中的前导字节:

    EF BB BF

    Flash Player 9 运行时在 UTF-8 文件上的这个字节顺序标记显然存在问题,这是不必要的,因为与 UTF-16 和 UTF-32 相比,UTF-8 中没有字节顺序。 Flash Player 10 对这个前导字节顺序标记没有问题。

    这就解释了为什么this other blog entry 记录了以下解决方案对他们有效:

    xmlString = xmlString.substr(1);
    

    那个特定的解决方案对我来说不太奏效,因为它将运行时错误转移给了 Flash Player 10 用户,而不是 Flash Player 9 用户。由于我们可以控制 XML 输入,我们可以简单地对其进行修改,但如果 XML 来自我们无法控制的源,我想我们可以测试 ByteArray 的前导 BOM,并如上所示跳过它。

    一些博客条目有助于确认 BOM 是问题所在,例如 entry,其中一位评论者表示他对同一 1088 运行时错误的解决方案是:

    对我来说,问题是 XML 用 BOM 保存在 UTF 中。

    另外,this other blog entry 提供了更多关于 Java 中发生的相同问题的确认:

    在处理 UTF-8 编码的 RSS 提要时,>prolog 中的这种三字节模式 (0xEF 0xBB 0xBF) 会导致各种有趣的 XML 解析问题

    【讨论】:

    • 如果在xml开头添加<?xml version="1.0" encoding="UTF-8"?>会怎样?
    • XML 声明是 XML 文件中的第一件事(在 BOM 之后)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    相关资源
    最近更新 更多