【问题标题】:XOM default namespace issueXOM 默认命名空间问题
【发布时间】:2012-07-27 14:27:29
【问题描述】:

我正在尝试将默认命名空间添加到位于不同命名空间中的根元素,但 XOM 不喜欢这样!

例如

<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 不会拥有它!

关于如何做到这一点的任何想法?

【问题讨论】:

    标签: schema xom


    【解决方案1】:

    这是多种因素阻止我添加默认命名空间的原因。 与 IT 中的大多数事情一样,解决方案是直截了当的,但实现起来并不容易:

    这里的关键是使用 .addNamespaceDeclaration(“”, namespace) 并将第一个参数设置为“” 这不直观,我使用 .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 命名空间,因为它与默认命名空间相同!

    干杯:-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 2012-12-29
      • 1970-01-01
      • 2018-12-20
      • 1970-01-01
      • 2020-12-26
      • 2014-04-16
      相关资源
      最近更新 更多