2014-01-07 53 views
2

使用SAX和Java我想解析XML字符串,但得到這個例外薩克斯當XML具有XSI分析異常:type屬性

[致命錯誤]:1:92:前綴 「XSI」 爲屬性「XSI :類型「與元素類型」設備「關聯未被綁定。

try { 
     SAXParserFactory factory = SAXParserFactory.newInstance(); 
     factory.setNamespaceAware(false); 
     factory.setValidating(false); 

     SAXParser parser = factory.newSAXParser(); 
     XMLReader xmlReader = parser.getXMLReader(); 
     handler = new ConfigHandler(); 

     xmlReader = XMLReaderFactory.createXMLReader(); 
     // assign our handler 
     xmlReader.setContentHandler(handler); 
     // perform the synchronous parse 
     xmlReader.parse(new InputSource(new StringReader(xml))); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

這裏是XML

<device xsi:type="axl:XIPPhone" ctiid="182" uuid="{20a9f66a-fb1f-6981-5851-1474258054dc}"> 
<fullConfig>true</fullConfig> 
<portalDefaultServer>serveraxd.lestry.com</portalDefaultServer> 
<deviceProtocol>SOORTY</deviceProtocol> 
.. 
.. 
</device> 

我不能夠改變這種情況下的XML內容。

+0

你的問題是什麼?如果您發佈了整個XML文檔(而不僅僅是一個片段),則該錯誤消息解釋了該問題。 「xsi」命名空間前綴未綁定到實際的命名空間URI。 – jarnbjo

+0

我的問題是,我能做些什麼來防止這個異常,並允許我解析XML文件。 – mrmannione

回答

3

正如錯誤消息所述,您沒有爲xsi:前綴提供名稱空間聲明。添加

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

到您的頂級元素(<device>元素)。

+0

有沒有可能的解決方法,但不添加這個。我無法控制XML文件? – mrmannione

+1

與現代XML解析器不同,沒有。您可能能夠找到一個古老的名稱空間XML解析器,但我真的不推薦它。 您的替代方案是對其執行非XML處理以檢查並插入名稱空間聲明。或者你可以將傳入的文檔換成附加的XML文件,但是你無法爲他們可能犯的每一個錯誤都做到這一點。作爲一名專業人士,我會將文檔反彈回來,並提供錯誤信息;他們需要爲了自己的利益來解決這個問題。 – keshlam

+0

這很好理解,我將在處理之前將名稱空間聲明插入到字符串中。這裏討論的服務器的配置非常廣泛,讓他們在這個方面前進幾近不可能。再次感謝所有。 – mrmannione