Problema con el espacio de nombres predeterminado de XOM

Estoy tratando de agregar un espacio de nombres predeterminado a un elemento raíz que está en un espacio de nombres diferente, ¡pero a XOM no le gusta esto!

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">

Quiero que el espacio de nombres inv también sea el espacio de nombres predeterminado agregando, por ejemplo

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

¡pero XOM no lo tendrá!

¿Alguna idea sobre cómo hacer esto?

preguntado el 27 de julio de 12 a las 15:07

1 Respuestas

Fue una combinación de cosas lo que me impidió agregar un espacio de nombres predeterminado. La solución, como con la mayoría de las cosas en TI, es sencilla, pero no es fácil llegar allí:

La clave aquí es usar .addNamespaceDeclaration(“”, espacio de nombres) con el primer parámetro establecido en “” esto no es intuitivo. Estaba usando .setNamespace() que no funciona.

Además, no me di cuenta de que crear un elemento usando:

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

crea automáticamente un espacio de nombres xmlns:env en el elemento raíz; Estaba haciendo esto explícitamente de nuevo; esto no causa ningún problema, pero si usa .addNamespaceDeclaration(“”, espacio de nombres) después de esto, no funcionará.

La línea con ** es todo lo que necesitas:

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);

¡Oh, sí, no necesitaba el espacio de nombres inv ya que es el mismo que el espacio de nombres predeterminado!

Saludos :-)

Respondido 03 ago 12, 11:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.