Formatting XML file using StAX

后端 未结 3 481
闹比i
闹比i 2020-12-10 08:51

I am using StAX XML stream writer to write the XML file. It writes all the data in a single line. I want all the tags to be indented instead of a single line.

相关标签:
3条回答
  • 2020-12-10 09:02

    Example pretty printing OMElement (Axiom library) 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 讨论(0)
  • 2020-12-10 09:18

    Answered here: StAX XML formatting in Java

    EDIT: A quick example (without resource cleaning) using 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());
    

    This gives you:

    <?xml version="1.0" encoding="UTF-8"?>
    <a>
      <b></b>
    </a>
    
    0 讨论(0)
  • 2020-12-10 09:19

    stax-utils provides class IndentingXMLStreamWriter which does the job:

    XMLStreamWriter writer =
      XMLOutputFactory.newInstance().createXMLStreamWriter(...);
    writer = new IndentingXMLStreamWriter(writer);
    ...
    
    0 讨论(0)
提交回复
热议问题