0

我正在尝试将默认命名空间添加到位于不同命名空间中的根元素,但 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 不会拥有它!

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

4

1 回答 1

0

是多种因素阻止我添加默认命名空间。与 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 命名空间,因为这与默认命名空间相同!

干杯:-)

于 2012-08-03T10:18:21.463 回答