2012-05-25 47 views
1

我試圖將XML文件(帶有「NDS」擴展名)作爲數據讀入到我的Android應用程序中。我選擇去DOM DocumentBuilder路線,調用它的分析方法。XML解析錯誤:UTF-8

問題是其中一個節點名稱中存在非ASCII delta(Δ)字符。這會導致解析操作在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,實際上這個XML由Internet Explorer正確解釋。

+0

[解析XML文件以DOM時錯誤]的可能重複(http://stackoverflow.com/questions/10692693/error-when-parsing-an-xml-file-to-dom) – Perception

回答

0

我相信XML 1.0要求元素和屬性名稱只包含ASCII字符(並且禁止某些非打印的ASCII字符)。聲明UTF-8編碼允許非ASCII字符出現在的元素和屬性中。

XML 1.1放寬了這一點,允許在元素和屬性名稱中使用Unicode,非ASCII字符。

+1

維基百科:「 XML 1.0(第五版)和XML 1.1支持直接使用元素名稱,屬性,註釋,字符數據和處理指令中的幾乎任何Unicode字符「 –

+0

元素名稱中存在2字節的UTF-8代碼似乎是問題。不能確定我使用的org.w3c.dom DocumentBuilder正在應用哪個版本的XML 1.0。 – dWeld

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]。