2012-07-27 133 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命名空间,因为这是一样的默认命名空间!

干杯:-)