Nella mia applicazione, ho alterare una parte del file XML, che iniziano in questo modo:Come mantenere gli spazi bianchi prima dell'elemento del documento durante l'analisi con Java?
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: version control yadda-yadda $ -->
<myElement>
...
Nota la riga vuota prima <myElement>
. Dopo il caricamento, alterazione e risparmio, il risultato è tutt'altro che gradevole:
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: version control yadda-yadda $ --><myElement>
...
ho scoperto che lo spazio bianco (una nuova riga) tra la testa e il nodo documento non è rappresentato nel DOM affatto. Il seguente codice autonomo riproduce il problema in modo affidabile:
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/>
Qualcuno ha un'idea di come evitare questo? Essenzialmente, voglio che l'output sia lo stesso dell'input. (So che la dichiarazione xml verrà rigenerata perché non fa parte del DOM, ma non è un problema qui.)
Ho finito per hackerarlo nell'output utilizzando una classe OutputStream personalizzata che cerca la prima occorrenza di "-><" e aggiunge due newline; Io uso questo flusso solo se il primo nodo figlio del documento è in realtà un commento. Ancora un hack, ma almeno perfettamente incapsulato :-) –
Ho lo stesso problema. Potresti per favore aiutare? http://stackoverflow.com/questions/30940162/dom-parser-wrong-childnodes-count – user3930361