Ошибка синтаксического анализа XML: UTF-8

1

Я пытаюсь читать как данные XML файл (с расширением NDS) в мое приложение для Android. Я выбираю маршрут DOM DocumentBuilder, вызывая его метод parse.

Проблема заключается в наличии символа дельта (Δ) не-ASCII в одном из имен узлов. Это приводит к сбою операции разбора с помощью DOMException. Когда я удаляю линию нарушения, она работает.

Сам XML файл, который я создаю под Windows, используя методы библиотеки.NET, имеет заголовок <?xml version="1.0" encoding="utf-8"?>. (Я также замечаю, что этот заголовок имеет 3-байтовую спецификацию спереди.)

Иерархия 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>

Вы могли бы подумать, что дельта-символ будет приемлемым в UTF-8, и на самом деле этот XML правильно интерпретируется Internet Explorer.

Теги:
dom

2 ответа

0

Чтение 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]

Есть символы Unicode, которые действительны в XML 1.0, но не все. Символ (# x394) - это допустимый NameStartChar, который находится в диапазоне [# x37F- # x1FFF].

0

Я считаю, что XML 1.0 требует, чтобы имена элементов и атрибутов содержали только символы ASCII (и некоторые непечатаемые ASCII-символы запрещены). Объявление кодировки UTF-8 позволяет символам, отличным от ASCII, появляться в значениях элементов и атрибутов.

XML 1.1 смягчил это, чтобы позволить символам Unicode, не-ASCII в элементах и именах атрибутов.

  • 1
    Из Википедии: «XML 1.0 (пятое издание) и XML 1.1 поддерживают прямое использование практически любого символа Юникода в именах элементов, атрибутах, комментариях, данных символов и инструкциях по обработке»
  • 0
    Наличие 2-байтового кода UTF-8 в имени элемента, безусловно, является проблемой. Не могу с уверенностью сказать, какая редакция XML 1.0 применяется в org.w3c.dom DocumentBuilder, который я использую.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню