2013-07-29 33 views
1

我的代碼通過將Attribute添加到現有的Element來修改XML Document。在修改之前,我使用SchemaValidator通過驗證運行Document,並通過。XML文檔驗證在修改過的文檔上失敗,但在重新編譯時通過

但是,如果我將Document實例傳遞給Validator,我添加Attribute(對每個模式有效)後失敗。

如果作爲中介步驟,我將Document實例轉換爲String並重新解析爲Document,此新的Document通過驗證。

我想我不應該這樣做。我嘗試使用normalizeDocumentnormalize,這些都沒有解決問題。

更新

我寫一個單元測試,什麼也不做,但驗證文檔,添加屬性,並重新驗證文檔。這通過。但是,當我運行整個系統通過文檔的集成測試時,它會失敗。再次,轉換爲字符串並返回到文檔通過驗證。

該代碼不在我可以粘貼在這裏的位置,它似乎是單元測試通過後的更廣泛的問題。

任何關於在哪裏進行調查的建議都會有所幫助。

+0

如何修改文檔(DOM,JDOM,XSLT?)什麼是確切的驗證錯誤? – obecker

+0

使用DOM。在元素「y」中不允許使用屬性「x」 –

+0

如果沒有可重現的代碼示例,很難說清楚。 – obecker

回答

2

我對名稱空間感知的XML Document有同樣的問題。

我正在使用setAttribute(name, value)添加非名稱空間屬性,導致相同的 元素「y」異常中不允許使用屬性「x」。重新解析文檔,問題就消失了。

修復方法是使用名稱空間感知方法setAttributeNS(namespaceURI, qualifiedName, value),傳遞null作爲namespaceURI。

+0

有一個代碼示例顯示此函數的用法 –