XMLStreamWriter Java StAX
时间:2020-02-23 14:35:39 来源:igfitidea点击:
在上一篇文章中,我们学习了如何使用Java StAX Iterator API编写XML,这里我们将使用StAX光标API编写XML文件。
XMLStreamWriter
Java StAX Cursor API在创建XML和输出XML方面非常直接。
我们需要创建XMLStreamWriter对象并将数据写入其中。
有用的方法是writeStartDocument(),writeStartElement(),writeCharacters(),writeEndElement()和writeEndDocument()。
XMLStreamWriter示例
其中我们将创建一个HashMap,然后将其写入XML文件。
package com.theitroad.xml.stax;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Map;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
public class StaxXMLStreamWriter {
public static void main(String[] args) {
String fileName = "/Users/hyman/tmp/employee.xml";
String rootElement = "Employee";
StaxXMLStreamWriter xmlStreamWriter = new StaxXMLStreamWriter();
Map<String,String> elementsMap = new HashMap<String, String>();
elementsMap.put("id", "1");
elementsMap.put("name", "hyman");
elementsMap.put("age", "29");
elementsMap.put("role", "Java Developer");
elementsMap.put("gender", "Male");
xmlStreamWriter.writeXML(fileName, rootElement, elementsMap);
}
private void writeXML(String fileName, String rootElement, Map<String, String> elementsMap) {
XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newInstance();
try{
XMLStreamWriter xmlStreamWriter = xmlOutputFactory.createXMLStreamWriter(new FileOutputStream(fileName), "UTF-8");
//start writing xml file
xmlStreamWriter.writeStartDocument("UTF-8", "1.0");
xmlStreamWriter.writeCharacters("\n");
xmlStreamWriter.writeStartElement(rootElement);
//write id as attribute
xmlStreamWriter.writeAttribute("id", elementsMap.get("id"));
//write other elements
xmlStreamWriter.writeCharacters("\n\t");
xmlStreamWriter.writeStartElement("name");
xmlStreamWriter.writeCharacters("\n\t\t"+elementsMap.get("name"));
xmlStreamWriter.writeCharacters("\n\t");
xmlStreamWriter.writeEndElement();
xmlStreamWriter.writeCharacters("\n\t");
xmlStreamWriter.writeStartElement("age");
xmlStreamWriter.writeCharacters("\n\t\t"+elementsMap.get("age"));
xmlStreamWriter.writeCharacters("\n\t");
xmlStreamWriter.writeEndElement();
xmlStreamWriter.writeCharacters("\n\t");
xmlStreamWriter.writeStartElement("gender");
xmlStreamWriter.writeCharacters("\n\t\t"+elementsMap.get("gender"));
xmlStreamWriter.writeCharacters("\n\t");
xmlStreamWriter.writeEndElement();
xmlStreamWriter.writeCharacters("\n\t");
xmlStreamWriter.writeStartElement("role");
xmlStreamWriter.writeCharacters("\n\t\t"+elementsMap.get("role"));
xmlStreamWriter.writeCharacters("\n\t");
xmlStreamWriter.writeEndElement();
//write end tag of Employee element
xmlStreamWriter.writeCharacters("\n");
xmlStreamWriter.writeEndElement();
//write end document
xmlStreamWriter.writeEndDocument();
//flush data to file and close writer
xmlStreamWriter.flush();
xmlStreamWriter.close();
}catch(XMLStreamException | FileNotFoundException e){
e.printStackTrace();
}
}
}
当我们执行上面的XMLStreamWriter示例程序时,我们得到以下XML文件。
<?xml version="1.0" encoding="UTF-8"?> <Employee id="1"> <name> hyman </name> <age> 29 </age> <gender> Male </gender> <role> Java Developer </role> </Employee>
请注意,为漂亮的打印XML使用了writeCharacters(),否则它将采用紧凑格式。

