2009-11-05 14 views
18

¿Hay alguna manera de decirle al transformador (al serializar un documento XML usando DOM) que omita el atributo independiente?Omitir el atributo independiente en la declaración xml cuando se usa Java DOM + Transformer.

Preferiblemente sin utilizar un truco, es decir, omitir la declaración XML completa y luego anteponerla manualmente.

Mi código actual:

Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
transformer.setOutputProperty(OutputKeys.STANDALONE, "yes"); //Note nothing is changed 

StreamResult result = new StreamResult(new StringWriter()); 
DOMSource source = new DOMSource(document); 
transformer.transform(source, result); 
return result.getWriter().toString(); 

actual:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<someElement/> 

previsto:

<?xml version="1.0" encoding="UTF-8"> 
<someElement/> 

Respuesta

41

lo descubrió ..

En lugar de cambios en el transformador,

Agregué lo siguiente al objeto del documento.

document.setXmlStandalone(true); 
+3

¿Por qué funciona? De acuerdo con la especificación: https://www.w3.org/TR/2004/REC-xml-20040204/#sec-rmd "Si hay declaraciones externas de marcado pero no hay una declaración de documento independiente, el valor" no " se supone." Esta respuesta: https://stackoverflow.com/questions/5578645/what-does-the-standalone-directive-mean-in-xml también indica que si falta el atributo independiente, entonces se asume "no". Entonces, ¿cómo es que document.setXmlStandalone (true); elimina el atributo? – mdzh

0

¿Qué versión de Java está utilizando y/o qué transformador XSLT? Con Sun Java 1.6.0_16, el atributo independiente solo se establece en el documento de salida si establece la propiedad de salida y el contenido también es correcto.

+0

Me da el mismo problema al utilizar el Java 8 SE incorporado de Eclipse 4.5 (Marte). – GreenhouseVeg

2

document.setXmlStandalone(true/false); funciona correctamente.

Cuestiones relacionadas