2

我正在尝试将 XML 文件(带有“NDS”扩展名)作为数据读入我的 Android 应用程序。我选择走 DOM DocumentBuilder 路线,调用它的 parse 方法。

问题是其中一个节点名称中存在非 ASCII 增量 (Δ) 字符。这会导致解析操作失败并出现 DOMException。当我去掉有问题的线时,它就起作用了。

我在 Windows 下使用 .NET 库方法创建的 XML 文件本身,它的标题为<?xml version="1.0" encoding="utf-8"?>. (我还注意到这个标头前面有 3 字节的 BOM。)

违规行周围的 XML 层次结构看起来像

<?xml version="1.0" encoding="utf-8"?>
<NDS SoftwareIdentity="MicroAnalyzer 2000" SoftwareVersion="3.5.8" WindowsVersion="Microsoft Windows NT 5.1.2600 Service Pack 3" CLRVersion="2.0.50727.3615" MachineName="SYSTEM2000_3033" MachineDescription="" DataSource="System2000_3033\SQLEXPRESS" Date="3/31/2012" Time="11:15 AM">
    <ASME_B46_1_2002DataSet xmlns="http://tempuri.org/ASME_B46_1_2002DataSet.xsd">
        <ASME_B46_1_2002RoughnessInstanceTable>
            <InstanceAppendixId>-1</InstanceAppendixId>
            <RΔaEnabled>false</RΔaEnabled>
        </ASME_B46_1_2002RoughnessInstanceTable>
    </ASME_B46_1_2002DataSet>
</NDS>

您会认为 delta 字符在 UTF-8 下是可以接受的,实际上 Internet Explorer 可以正确解释此 XML。

4

2 回答 2

1

阅读http://www.w3.org/TR/REC-xml/#NT-NameChar

[4]     NameStartChar      ::=      ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]


[4a]    NameChar       ::=      NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]

在 XML 1.0 中有有效的 unicode 字符,但不是全部。你的角色 (#x394) 是一个有效的 NameStartChar,在 [#x37F-#x1FFF] 范围内。

于 2012-05-25T15:18:24.350 回答
-1

我相信 XML 1.0 要求元素和属性名称仅包含 ASCII 字符(并且禁止某些非打印 ASCII 字符)。声明 UTF-8 编码允许非 ASCII 字符出现在元素和属性的值中。

XML 1.1 放宽了这一点,允许在元素和属性名称中使用 Unicode、非 ASCII 字符。

于 2012-05-25T14:47:14.287 回答