En mi solicitud, alterar una parte de los archivos XML, que comienzan así:¿Cómo mantener el espacio en blanco antes del elemento del documento al analizar con Java?
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: version control yadda-yadda $ -->
<myElement>
...
Nota de la línea en blanco antes <myElement>
. Después de cargar, la alteración y el ahorro, el resultado está lejos de ser agradable:
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: version control yadda-yadda $ --><myElement>
...
descubrí que el espacio en blanco (una nueva línea) entre el comentario y el nodo de documento no está representado en el DOM en absoluto. El siguiente código autónomo reproduce el problema de manera confiable:
String source =
"<?xml version=\"1.0\" encoding=\"UTF-16\"?>\n<!-- foo -->\n<empty/>";
byte[] sourceBytes = source.getBytes("UTF-16");
DocumentBuilder builder =
DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc =
builder.parse(new ByteInputStream(sourceBytes, sourceBytes.length));
DOMImplementationLS domImplementation =
(DOMImplementationLS) doc.getImplementation();
LSSerializer lsSerializer = domImplementation.createLSSerializer();
System.out.println(lsSerializer.writeToString(doc));
// output: <?xml version="1.0" encoding="UTF-16"?>\n<!-- foo --><empty/>
¿Alguien tiene una idea de cómo evitar esto? Básicamente, quiero que la salida sea la misma que la entrada. (Sé que la declaración xml se regenerará porque no forma parte del DOM, pero eso no es un problema aquí).
Terminé pirateando esto en la salida usando una clase OutputStream personalizada que busca la primera aparición de "-><" y agrega dos nuevas líneas; Solo uso esta secuencia si el primer nodo secundario de documento es, de hecho, un comentario. Todavía un truco, pero al menos perfectamente encapsulado :-) –
Tengo el mismo problema. ¿Podría ayudarme? http://stackoverflow.com/questions/30940162/dom-parser-wrong-childnodes-count – user3930361