2012-07-27 89 views
0

我想將默認名稱空間添加到位於不同名稱空間的根元素,但XOM不喜歡這樣!XOM默認命名空間問題

e.g

<env:contentEnvelope 
xmlns:env="http://data.com/Envelope/2008-05-01/" 
xmlns:inv="http://Patents.data.com/2012-01-01/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 

我希望通過添加 例如INV的命名空間也是默認的命名空間

xmlns="http://Patents.data.com/2012-01-01/" 

但是XOM不會有它!

有關如何做到這一點的任何想法?

回答

0

這是一個阻止我添加默認名稱空間的組合。 解決方案與IT中的大多數事情一樣簡單但不容易到達:

這裏的關鍵是使用.addNamespaceDeclaration(「」,命名空間),第一個參數設置爲「」,這不直觀我是使用.setNamespace()不起作用。

另外我沒有意識到,創建使用元素:

new Element("env:CEnvelope", IConstants.ENV_NAMESPACE); 

自動創建一個命名空間的xmlns:在根元素ENV;我明確地再次這樣做。這不會導致問題,但如果在此之後使用.addNamespaceDeclaration(「」,namespace),則它不起作用。

與**的線就是你需要:

private void setRoot(){ 

    Element root = new Element("env:CEnvelope", IConstants.ENV_NAMESPACE);  

    //Add root Element to the Document 
    this.doc = new Document(root); 

    root.addNamespaceDeclaration("xsi", IConstants.XSI_NAMESPACE); 
    **root.addNamespaceDeclaration("", IConstants.PAT_NAMESPACE); 
    //root.setNamespaceURI(IConstants.PAT_NAMESPACE); 
    //root.addNamespaceDeclaration("env", IConstants.ENV_NAMESPACE); 

哦,是的,我並不需要INV命名空間,因爲這是一樣的默認命名空間!

乾杯:-)