2012-08-04 3 views
6

Jak dodać podział wiersza po komentarzu "nie edytuj tego pliku"? Próbowałem dodać textnode z podziałem wiersza, ale to nie działa.Jak dodać podział wiersza do pliku XML za pomocą Java?

Kod:

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(); 
     } 
    } 
} 

wyjściowa:

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

+1

hmm ... to ma podział wiersza na moim komputerze ... –

+0

I korzystam z Java 7, a ty? – perak

+0

Podobnie ... Dziwne. –

Odpowiedz

0

mam pustą linię, a kiedy wpadłem kodu. Czy oglądasz plik w edytorze, czy parsujesz i wyświetlasz go? Pytam, ponieważ ustawienia xml: space = "preserve" mogą być niewydolne w kodzie parsera, jeśli tak jest.

Inną opcją jest umieszczenie komentarza wewnątrz elementu głównego XML sama:

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

na kilka sposobów, to jest bardziej interoperacyjne. Na przykład załóżmy, że używasz xinclude do osadzenia, a następnie do ostatecznej wersji pliku. Sposób, w jaki podałeś w pytaniu, że nie chcesz edytować pliku, nie zostanie uwzględniony. Jeśli umieścisz go w głównym elemencie, to (i prawdopodobnie powinieneś go zmienić, by powiedzieć coś o nie edytowaniu zawartości tego elementu projektu, zamiast wypowiadania pliku z tego samego powodu).

0

Nie ma NEWLINE po komentarzu, ponieważ, nawet jeśli aktywna wcięcia, komentarz i następujący węzeł mają głębokość 0.