2015-11-08 74 views
0

我目前正在研究將XMLStreamWriter的一個鬆散端口寫入另一個環境,並嘗試獲取其名稱空間邏輯的句柄。這個類的Oracle's documentation似乎指定禁用名稱空間修復,嘗試使用已經綁定到某個前綴的名稱空間URI編寫元素/屬性,使用不同的前綴,應該會導致XMLStreamException。但我沒有看到這種行爲。用下面的代碼:XMLStreamWriter缺少異常?

public void run() throws Exception { 
    String BOB = "http://www.bob.com/" 
    XMLOutputFactory fac = XMLOutputFactory.newInstance(); 
    fac.setProperty("javax.xml.stream.isRepairingNamespaces", false); // default 
    XMLStreamWriter writer = fac.createXMLStreamWriter(new FileWriter("tst.xml")); 

    writer.writeStartElement("bob", "root", BOB); 
    writer.setPrefix("bob", BOB); 
    writer.writeNamespace("bob", BOB); 
    writer.writeAttribute("notbob", BOB, "attr", "value"); // Should fail? 
    writer.writeStartElement("notbob", "firstinner", BOB); // Should fail? 
    writer.writeEndElement(); 
    writer.writeEndElement(); 
    writer.writeEndDocument(); 

    writer.flush(); 
    writer.close(); 
} 

我會用"notbob"前綴相同的命名空間URI已經綁定到"bob"拋出異常期待兩條線。相反,代碼正常完成,並tst.xml包含

<bob:root xmlns:bob="http://www.bob.com" notbob:attr="value"> 
    <notbob:firstinner></notbob:firstinner> 
</bob:root> 

我誤解,或者是這種行爲不正確的?

回答

0

嘗試使用已綁定到某個前綴的名稱空間URI(使用不同的前綴)編寫元素/屬性應該會導致XMLStreamException。

XML允許將多個不同的前綴綁定到相同的名稱空間URI。因此在這種情況下拋出XMLStreamException將違反XML規範。

+0

這很有道理 - 所以我們可以考慮Oracle的文檔(我修正了上面的鏈接)是不正確的? –

+0

我會說文檔不正確。這並不令我感到意外,因爲StAX規格已知質量很差。 –

相關問題