java xml stax_如何使用Java StAX Iterator API用Java编写XML文件

java xml stax

Java Streaming API for XML or Java StAX API was introduced in Java 6 and considered superior to DOM and SAX parsers. As explained in earlier post about Java StAX API, it consists of cursor-based API and iterator based API.

Java 6中引入了用于XML的Java Streaming API或Java StAX API,它被认为优于DOM和SAX解析器。 如先前有关Java StAX API的文章所述 ,它由基于游标的API和基于迭代器的API组成。

Here we will see how we can write XML file in java using StAX Iterator based API (XMLEventWriter).

在这里,我们将看到如何使用基于StAX Iterator的API(XMLEventWriter)在Java中编写XML文件。

package com.journaldev.xml;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import javax.xml.stream.XMLEventFactory;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.Characters;
import javax.xml.stream.events.EndElement;
import javax.xml.stream.events.StartDocument;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;

public class StaxXMLWriter {

    public static void main(String[] args) {
        String fileName = "/Users/pankaj/employee.xml";
        String rootElement = "Employee";
        StaxXMLWriter xmlWriter = new StaxXMLWriter();
        Map<String,String> elementsMap = new HashMap<String, String>();
        elementsMap.put("name", "Pankaj");
        elementsMap.put("age", "29");
        elementsMap.put("role", "Java Developer");
        elementsMap.put("gender", "Male");
        
        xmlWriter.writeXML(fileName, rootElement, elementsMap);
    }
    
    public void writeXML(String fileName, String rootElement, Map<String, String> elementsMap){
        XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newInstance();
        try {
            XMLEventWriter xmlEventWriter = xmlOutputFactory
                    .createXMLEventWriter(new FileOutputStream(fileName), "UTF-8");
            //For Debugging - below code to print XML to Console
            //XMLEventWriter xmlEventWriter = xmlOutputFactory.createXMLEventWriter(System.out);
            XMLEventFactory eventFactory = XMLEventFactory.newInstance();
            XMLEvent end = eventFactory.createDTD("\n");
            StartDocument startDocument = eventFactory.createStartDocument();
            xmlEventWriter.add(startDocument);
            xmlEventWriter.add(end);
            StartElement configStartElement = eventFactory.createStartElement("",
                "", rootElement);
            xmlEventWriter.add(configStartElement);
            xmlEventWriter.add(end);
            // Write the element nodes
            Set<String> elementNodes = elementsMap.keySet();
            for(String key : elementNodes){
                createNode(xmlEventWriter, key, elementsMap.get(key));
            }
            
            xmlEventWriter.add(eventFactory.createEndElement("", "", rootElement));
            xmlEventWriter.add(end);
            xmlEventWriter.add(eventFactory.createEndDocument());
            xmlEventWriter.close();

        } catch (FileNotFoundException | XMLStreamException e) {
            e.printStackTrace();
        }
    }
    
    private static void createNode(XMLEventWriter eventWriter, String element,
            String value) throws XMLStreamException {
          XMLEventFactory xmlEventFactory = XMLEventFactory.newInstance();
          XMLEvent end = xmlEventFactory.createDTD("\n");
          XMLEvent tab = xmlEventFactory.createDTD("\t");
          //Create Start node
          StartElement sElement = xmlEventFactory.createStartElement("", "", element);
          eventWriter.add(tab);
          eventWriter.add(sElement);
          //Create Content
          Characters characters = xmlEventFactory.createCharacters(value);
          eventWriter.add(characters);
          // Create End node
          EndElement eElement = xmlEventFactory.createEndElement("", "", element);
          eventWriter.add(eElement);
          eventWriter.add(end);

        }

}

Above program creates below XML file:

上面的程序创建下面的XML文件:

employee.xml

employee.xml

<?xml version="1.0" encoding="UTF-8"?>
<Employee>
	<age>29</age>
	<name>Pankaj</name>
	<gender>Male</gender>
	<role>Java Developer</role>
</Employee>

I have used \n and \t elements to create the formatted XML but to save memory and reduce processing time, you can remove them from the implementation.

我曾使用\ n\ t元素来创建格式化的XML,但是为了节省内存并减少处理时间,您可以将它们从实现中删除。

Also for debugging purpose, you can change the output stream to System.out to print the XML file to console.

同样出于调试目的,您可以将输出流更改为System.out以将XML文件打印到控制台。

翻译自: https://www.journaldev.com/892/how-to-write-xml-file-in-java-using-java-stax-api

java xml stax

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值