Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Problema al generar un XML con JDOM (NameSpaces)

Estas en el tema de Problema al generar un XML con JDOM (NameSpaces) en el foro de Java en Foros del Web. Buenos días, tengo un pequeño problemilla al generar un fichero XML con JDOM que no consigo solucionar. Necesito general el siguiente documento: Código: <?xml version="1.0" ...
  #1 (permalink)  
Antiguo 09/05/2014, 02:37
 
Fecha de Ingreso: enero-2014
Mensajes: 17
Antigüedad: 10 años, 2 meses
Puntos: 0
Problema al generar un XML con JDOM (NameSpaces)

Buenos días,

tengo un pequeño problemilla al generar un fichero XML con JDOM que no consigo solucionar.

Necesito general el siguiente documento:

Código:
	<?xml version="1.0" encoding="UTF-8"?>
	<accessModeObject xmlns="http://......" xmlns:xsi="http://www....." xsi:schemaLocation="http://www.....xsd">
		<accessMode>
			<tipo1>colour</tipo1>
			<tipo2>size</tipo2>
		</accessMode>
		<accessMode>
			<tipo1>weight</tipo1>
			<tipo2>forme</tipo2>
		</accessMode>
	</accessModeObject>
En JAVA hago lo siguiente:

Código:
	Document document = new Document();
	Namespace namespace = Namespace.getNamespace("http://......");                
	Element accessModeObject= new Element("accessModeObject", namespace);

	Namespace XSI = Namespace.getNamespace("xsi", "http://www.....");
	accessForAllUser.addNamespaceDeclaration(XSI);
	accessForAllUser.setAttribute("schemaLocation", "http://www.....xsd", XSI);
	document.addContent(accessModeObject);

	// Relleno el AccessMode con los tipos
	Element accessMode = new Element("accessMode");
	accessMode.addContent("size");
	//etc

	
	accessModeObject.addContent(accessMode);
El problema es que me propaga el NAMESPACE a todos los hijos y el resultado es:

Código:
	<?xml version="1.0" encoding="UTF-8"?>
	<accessModeObject xmlns="http://......" xmlns:xsi="http://www....." xsi:schemaLocation="http://www.....xsd">
		<accessMode xmlns="">
			<tipo1>colour</tipo1>
			<tipo2>size</tipo2>
		</accessMode>
		<accessMode xmlns="">
			<tipo1>weight</tipo1>
			<tipo2>forme</tipo2>
		</accessMode>
	</accessModeObject>

he probado con

Código:
accessMode.removeNamespaceDeclaration(namespace);
o con

Código:
Element accessMode = new Element("accessMode", "");

pero nada, no funciona.


¿¿Cómo puedo quitar el nameSpace de los hijos del rootElement??
  #2 (permalink)  
Antiguo 09/05/2014, 05:38
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Problema al generar un XML con JDOM (NameSpaces)

Parto de que JDOM nunca lo he utilizado porque hay alternativas más cómodas y apropiadas para lo que yo uso (Xstream, JAXB).

El problema está en la forma en que JDOM trata los namespace ya que todos tus elementos tienen namespace, así que si no se lo indicas él asume que su namespace es el xmlns="" (no tiene).

Así que o añades el namespace a todos los elementos

Cita:
Namespace namespace = Namespace.getNamespace("http://......");
Element accessModeObject= new Element("accessModeObject", namespace);
Element accessMode = new Element("accessMode",namespace);
o añades un prefijo al namespace de forma que JDOM interpreta que todos los elementos en su interior pertecen al mismo namespace.

Cita:
Namespace namespace = Namespace.getNamespace("kk","http://......");
Da como resultado

Cita:
<?xml version="1.0" encoding="UTF-8"?>
<kk:accessModeObject xmlns:kk="http://......">
<accessMode>
<size>3</size>
</accessMode>
</kk:accessModeObject>
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 09/05/2014, 08:14
 
Fecha de Ingreso: enero-2014
Mensajes: 17
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Problema al generar un XML con JDOM (NameSpaces)

Gracias por la respuesta Xerelo, pero no me vale.

No puedo añadir prefijos porque variaría en XML y es inmodificable por requisitos.

También he intentado añadir un NAMESPACE a cada Element, poniendo a vacío el namespace de los elementos en los que no quiero que aparezca, pero nada, me sigue mostrando el namespace.
  #4 (permalink)  
Antiguo 09/05/2014, 08:23
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Problema al generar un XML con JDOM (NameSpaces)

Creo que no me has entendido, si pones a todos los elementos el mismo namespace que el root, no aparecen.

Cita:
Namespace namespace = Namespace.getNamespace("http://......");
Element accessModeObject= new Element("accessModeObject", namespace);

Document document = new Document(accessModeObject);

Namespace XSI = Namespace.getNamespace("xsi", "http://www.....");

Element accessMode = new Element("accessMode",namespace);
Element size = new Element("size",namespace);
size.addContent("3");
accessMode.addContent(size);
//etc


accessModeObject.addContent(accessMode);



XMLOutputter xmlOutput = new XMLOutputter();

// display nice nice
xmlOutput.setFormat(Format.getPrettyFormat());
try {
xmlOutput.output(document, System.out );
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Da como salida

Cita:
<?xml version="1.0" encoding="UTF-8"?>
<accessModeObject xmlns="http://......">
<accessMode>
<size>3</size>
</accessMode>
</accessModeObject>
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #5 (permalink)  
Antiguo 09/05/2014, 08:30
 
Fecha de Ingreso: enero-2014
Mensajes: 17
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Problema al generar un XML con JDOM (NameSpaces)

Xerelo, funciona!!!
Es eso.

Muchísimas gracias. Eres un crack ;)

Etiquetas: jdom, xml
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:17.