2010-06-01 5 views
4

J'utilise le programme d'écriture de flux XML StAX pour écrire le fichier XML. Il écrit toutes les données sur une seule ligne. Je veux que toutes les étiquettes soient indentées au lieu d'une seule ligne.Formatage d'un fichier XML à l'aide de StAX

+0

en double de http://stackoverflow.com/questions/290326/stax-xml-formatting-in-java – skaffman

+2

@skaffman: De que je ne suis pas capable de comprendre comment définir le parmeter de retrait et où je peux passer mon nom de fichier xml. – Anurag

Répondre

4

répondues ici: StAX XML formatting in Java

EDIT: Un exemple rapide (sans nettoyage des ressources) en utilisant Stax-utils (https://stax-utils.dev.java.net/):

XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newInstance(); 
FileOutputStream file = new FileOutputStream("d:/file.xml"); 
XMLEventWriter writer = xmlOutputFactory.createXMLEventWriter(file); 
writer = new IndentingXMLEventWriter(writer); 
XMLEventFactory eventFactory = XMLEventFactory.newInstance(); 
writer.add(eventFactory.createStartDocument()); 
writer.add(eventFactory.createStartElement("", "", "a")); 
writer.add(eventFactory.createStartElement("", "", "b")); 
writer.add(eventFactory.createEndElement("", "", "b")); 
writer.add(eventFactory.createEndElement("", "", "a")); 
writer.add(eventFactory.createEndDocument()); 

Cela vous donne:

<?xml version="1.0" encoding="UTF-8"?> 
<a> 
    <b></b> 
</a> 
+0

J'ai vérifié cela, pouvez-vous donner un exemple avec l'extrait de code pour passer mon fichier xml et définir l'option de retrait. Dans l'exemple fourni à l'emplacement ci-dessus, je ne suis pas capable de comprendre comment régler tous ces paramètres. – Anurag

+0

J'ai ajouté un exemple à la poste. –

+0

Merci, c'est vraiment utile – Anurag

8

stax-utils fournit classe IndentingXMLStreamWriter qui fait le travail:

XMLStreamWriter writer = 
    XMLOutputFactory.newInstance().createXMLStreamWriter(...); 
writer = new IndentingXMLStreamWriter(writer); 
... 
+0

pouvez-vous s'il vous plaît nommer le fichier jar. Je ne reçois pas l'option de téléchargement sur le site donné. – Anurag

+0

@Anurag - https://stax-utils.dev.java.net/files/documents/1519/50947/stax-utils-20070216.zip – chris

+0

@Chris j'ai essayé ceci avec le lot de printemps. Je reçois le format XML dans un format approprié, mais lorsque je le déploie sur weblogic et exécute le travail par lots, je vois " " inséré à la fin de chaque ligne. Comment éviter cela? –

1

Exemple joli OMElement d'impression (bibliothèque Axiom) via Stax:

OMElement mapArg = fac.createOMElement(name, elementNs); 
mapArg.addAttribute("type", soapXml.getPrefix() + ":Map", xsi); 
PropertyDescriptor[] properties = PropertyUtils.getPropertyDescriptors(value); 
for (PropertyDescriptor property : properties) { 
    if (property.getName().equals("class")) 
     continue; 
    try { 
     mapArg.addChild(keyValue(property.getName(), 
       PropertyUtils.getProperty(value, property.getName()))); 
    } catch (Exception e) { 
    } 
} 
final StringWriter stringWriter = new StringWriter(); 
try { 
    IndentingXMLStreamWriter xmlWriter = new IndentingXMLStreamWriter(StaxUtilsXMLOutputFactory.newInstance().createXMLStreamWriter(stringWriter)); 
    mapArg.serialize(xmlWriter); 
    System.out.println(stringWriter.toString()); 
} catch (XMLStreamException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
+0

Merci! Très utile :) –

Questions connexes