2010-07-17 6 views
2

J'écris actuellement xml pour doc xml en Java, mais il est pas correctement formaté, son format comme celui-ci: cecomment écrire correctement formaté xml

<book id="bk102"> 
<author>Ralls, Kim</author> 
<title>Midnight Rain</title> 
<genre>Fantasy</genre> 
<price>5.95</price> 
<publish_date>2000-12-16</publish_date> 
<description>A former architect battles corporate zombies, 
an evil sorceress, and her own childhood to become queen 
of the world.</description> 
</book> 

Au lieu de ce genre, je peux le faire pour l'aligner correctement comme le reste du document?

<book id="bk102"> 
     <author>Ralls, Kim</author> 
     <title>Midnight Rain</title> 
     <genre>Fantasy</genre> 
     <price>5.95</price> 
     <publish_date>2000-12-16</publish_date> 
     <description>A former architect battles corporate zombies, 
     an evil sorceress, and her own childhood to become queen 
     of the world.</description> 
</book> 

J'ai une réponse au sujet de double possible, ce peut être le cas, mais dans mon cas, sa ne fonctionne pas mon code ici:

private void writeFile(File file) { 
      Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
      transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
      StreamResult resultStream = new StreamResult(new StringWriter()); 
      DOMSource source = new DOMSource(getDocument()); 
      transformer.transform(source, resultStream); 

      BufferedWriter out = new BufferedWriter(new FileWriter(file)); 
      out.write(resultStream.getWriter().toString().trim()); 
      out.close(); 
} 
+0

double possible de [Java: Comment indentons XML généré par Transformer] (http: //stackoverflow.com/questions/1384802/java-how-to-indent-xml-generated-by-transformer) – phihag

+0

duplicata possible oui tout simplement ne fonctionne pas, laissez-moi mettre à jour ma question – London

+1

Avez-vous essayé avec transformer.setOutputProperty ("indenting", "4"); et transformFactory.setAttribute ("indent-number", new Integer (2)); Je demande parce que votre code ne montre pas cela. –

Répondre

4

Avez-vous essayé:

StreamSource stylesource = new StreamSource(getClass().getResourceAsStream("proper-indenting.xsl")); 
Transformer transformer = TransformerFactory.newInstance().newTransformer(stylesource); 

Où source xsl est:

<!DOCTYPE stylesheet [ 
    <!ENTITY cr "<xsl:text> 
</xsl:text>"> 
]> 


    <xsl:stylesheet 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xmlns:xalan="http://xml.apache.org/xslt" 
     version="1.0"> 

     <xsl:output method="xml" indent="yes" xalan:indent-amount="3"/> 

     <!-- copy out the xml --> 
     <xsl:template match="* | @*"> 
      <xsl:copy><xsl:copy-of select="@*"/><xsl:apply-templates/></xsl:copy> 
     </xsl:template> 

    </xsl:stylesheet> 

Source originale here

+0

ça y est, bon – London

-3

Avez-vous essayé

System.out.print("YOUR SPACES"); 
+0

Je n'essaie pas d'insérer de la chaîne en XML, j'insère du XML en XML, ce n'est pas vraiment ce que j'ai demandé -1 pardon – London

2

La définition de OutputKeys.INDENT sur "yes" devrait être tout ce qui est nécessaire. Malheureusement, la version de xalan livrée avec le jre n'insère que des retours à la ligne après les éléments lorsqu'on lui demande de formater la sortie. Vous pouvez essayer une version plus récente de xalan ou utiliser saxon qui supporte définitivement la sortie bien formatée.

Questions connexes