2012-05-15 69 views
0

我正在嘗試讀取已複製名稱空間聲明的現有xml文件。對我來說,留下這些聲明以便進一步處理非常重要。之前我使用XERCES實現org.w3c.dom api來讀取這樣的文檔,並且所有的聲明都離開了,但是當我開始使用JDOM時,它開始省略冗餘的名稱空間聲明。使用JDOM留下重複的名稱空間聲明

下面是示例XML文件:

<?xml version="1.0" encoding="UTF-8"?> 
<document xmlns:ns="namespace_uri"> 
    <element1>...</element1> 
    <element2> 
    <ns:child> 
     text 
    </ns:child> 
    <element3 xmlns:ns="namespace_uri"> 
    <ns:child> 
     content 
    </ns:child> 
    </element3> 
</document> 

我建立JDOM文檔與此代碼:

SAXBuilder builder = new SAXBuilder(); 
File inputXml = new File(inputFile); 
jdomInDoc = builder.build(inputXml); 

有沒有辦法迫使JDOM不要省略多餘的命名空間聲明?

非常感謝您的回答。

回答

0

目前在JDOM中沒有辦法離開冗餘名稱空間的聲明。這是可能的,如果你想要的話,甚至可能會覆蓋XMLOutputter來輸出重複項。我可以期待這一點。

我已經打開發行83 https://github.com/hunterhacker/jdom/issues/83

這個S之類的東西,可能會被添加到JDOM格式系統

無論如何,我會來看一下,這是否將有可能在JDOM與定製...

+0

謝謝你的回答和線索。我決定用我自己的類來重寫AbstractDOMOutputProcessor,強制它去做,我需要。它適用於我,但它是相當不雅的解決方案,如果JDOM有一天允許通過某些參數自定義輸出以留下冗餘名稱空間,那將是很好的。 – user1395648

+0

嗨,我'試着'把一個全面的系統來跟蹤從輸入到輸出的命名空間。保持兼容性並不容易。看起來你可能比我做得更好...... SAX解析XML文檔時,如果有一個「冗餘」的子命名空間,將被忽略....很難將這一切置於一個評論中。請考慮將您的解決方案添加到https://github.com/hunterhacker/jdom/issues/83(我剛剛更新了...我花了幾個小時調查)。 – rolfl

0

什麼樣的軟件將接收此XML,並根據是否存在冗餘名稱空間聲明來區別對待它?可能是同一種軟件,只有在用單引號分隔屬性時才能處理屬性,或者只包含在CDATA節中的文本中?

像Xerces或JDOM這樣的通用XML軟件有權假定接收者是一個行爲良好的XML消費者,這意味着它不會附加意義到詞彙XML表示的意外事件,如選擇引號, CDATA的使用或冗餘名稱空間綁定的存在。

+0

但是,處理XML模式導入時不需要這些嗎?如果我在命名空間'tns'中定義類型T並將其導入到模式S中,那麼我必須在前綴和'tns'之間具有能夠引用類型T的名稱空間綁定。但是,此模式文件中沒有元素可以使用這個綁定。 –

相關問題