2012-08-04 94 views
6

¿Cómo agregar salto de línea después del comentario "no editar este archivo"? Intenté agregar textnode con salto de línea, pero no funciona.¿Cómo agregar un salto de línea en un archivo XML con Java?

Código:

import java.io.File; 

import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.transform.OutputKeys; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 

public class Main { 
    public static void main(String[] args) { 
     try { 
      final Document doc = DocumentBuilderFactory.newInstance(). 
        newDocumentBuilder().newDocument(); 

      doc.appendChild(doc.createComment(" DO NOT EDIT THIS FILE ")); 

      final Element rootElement = doc.createElement("projects"); 
      doc.appendChild(rootElement); 

      final Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
      transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
      transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); 
      transformer.transform(new DOMSource(doc), new StreamResult(new File("C:/abc.xml"))); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Salida:

<!-- DO NOT EDIT THIS FILE --><projects/> 

+1

Hmm ... que tiene un salto de línea en mi máquina ... Me –

+0

estoy usando Java 7, ¿y usted? – perak

+0

Del mismo modo ... Impar. –

Respuesta

0

que tienen una línea en blanco, así cuando me encontré con su código. ¿Estás viendo el archivo en un editor o analizándolo y mostrándolo? Lo pregunto porque la configuración de xml: space = "preserve" puede ser incompleta en el código del analizador, si ese es el caso.

La otra opción es poner el comentario dentro del elemento raíz XML sí:

 final Element rootElement = doc.createElement("projects"); 
     doc.appendChild(rootElement); 
     rootElement.appendChild(doc.createComment(" DO NOT EDIT THIS FILE ")); 

En varias maneras esto es más interoperable. Por ejemplo, digamos que usa xinclude para incrustar luego en la versión final del archivo. La forma en que tiene en su pregunta el aviso de no editar el archivo no se incluirá. Si lo coloca dentro del elemento raíz, lo hará (y probablemente debería cambiarlo para decir algo sobre no editar el contenido de este elemento del proyecto, en lugar de decir el archivo por el mismo motivo).

0

No hay nuevaLinea después del comentario, ya que, incluso si se ha activado la sangría, el comentario y el siguiente nodo de tener profundidad 0.

Cuestiones relacionadas