2011-07-18 23 views
2

source.xmlXMLStreamWriter.writeStartElement(前綴的localName,則namespaceURI),前綴 「清單」 不能被解析爲命名空間URI

<?xml version="1.0" encoding="UTF-8"?> 
<zip:archive xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" xmlns:zip="com.test.zip"> 
<zip:entry zip:target="test1.xml"><manifest:manifest>aaa</manifest:manifest></zip:entry> 
<zip:entry zip:target="test2.xml">.......</zip:entry> 
</zip:archive> 

我用javax.xml.stream.XMLStreamReader閱讀source.xml文件,做一些動作,然後寫磁盤根據zip:target的屬性值。

結果文件,test1.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<manifest:manifest>aaa</manifest:manifest> 

你知道,這是不對的。前綴「清單」無法解析爲名稱空間URI。

通過調試,我發現以下語句被成功調用。

XMLStreamWriter.writeStartElement("manifest", "manifest", "urn:oasis:names:tc:opendocument:xmlns:manifest:1.0"); 

writeStartElement的第三個參數不爲null。但爲什麼結果文件中缺少命名空間?

我嘗試了兩種方法:

  1. 集sRepairingNamespaces是真實
  2. 添加和writeNamespace writeStartElement

但新的麻煩來了之後,命名空間進行了重新聲明和複製。

+0

如果將sRepairingNamespaces設置爲true,則會出現新的問題,名稱空間被重新聲明並重復。 – guhai

+0

您是否向'XMLStreamWrite'r提供了'NamespaceContext'的實現來將URI綁定到前綴? –

回答

0

我相信你需要在writeStartElement之前設置前綴。我不認爲你需要sRepairingNamespaces - 但我不知道。

+0

它不起作用!這個問題的特殊性:將一個xml文件分割成幾個xml文件,並且這些命名空間位於根節點中。 – guhai