【非原创】DOM、SAX、DOM4J、JDOM、StAX生成 XML并返回XML字符串形式
package com.ydd.utils;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.Text;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;
public class CreateXML {
/**
* @param args
*/
//Dom创建xml
public static String createXMLForDOM(List list){
String xmlStr = null;
try {
if (null != list && !list.isEmpty()) {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.newDocument();
// 文档对象创建一个 根 元素
Element users = doc.createElement("users");
doc.appendChild(users);
for (UserJavaBeanForXML user : list) {
// 创建的子元素
Element userElt = doc.createElement("user");
users.appendChild(userElt);
// 创建的子元素
Element idElt = doc.createElement("uuid");
userElt.appendChild(idElt);
// 创建子元素的文本值
// 第一种方式
// Text idTxt = doc.createTextNode(String.valueOf(c.getId()));
// idElt.appendChild(idTxt);
// 第二种方式
idElt.setTextContent(String.valueOf(user.getUuid()));
//增加一个user的"标识"属性--uuid 并且给出值为1-----------------------------------------------------------------
Attr id = doc.createAttribute("uuid");
userElt.setAttributeNode(id);
id.setValue("1");
// 创建的子元素
Element nameElt = doc.createElement("myname");
userElt.appendChild(nameElt);
// 创建子元素的文本值
Text nameTxt = doc.createTextNode(user.getMyname());
nameElt.appendChild(nameTxt);
// nameElt.setTextContent(po.getName());
// 创建的子元素
Element sexElt = doc.createElement("sex");
userElt.appendChild(sexElt);
// 创建子元素的文本值
Text sexEtx = doc.createTextNode(user.getSex());
sexElt.appendChild(sexEtx);
// 创建的子元素
Element ageElt = doc.createElement("age");
userElt.appendChild(ageElt);
// 创建子元素的文本值
Text ageEtx = doc.createTextNode(user.getAge()+"");
ageElt.appendChild(ageEtx);
}
xmlStr = getDomXml(doc);
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
System.out.println("DOM:" + xmlStr);
return xmlStr;
}
private static String getDomXml(Node doc) {
String xmlStr = null;
try {
// 以 Document Object Model(DOM)树的形式充当转换 Source 树的持有者
DOMSource source = new DOMSource(doc);
//用来生成XML文件
// 要生成文件需构造PrintWriter的writer,
//DOM中这种方式name的值没有写进去,由于编码的问题
// PrintWriter writerXml = new PrintWriter(new FileOutputStream ("city-dom.xml"));
//用OutputStreamWriter加了编码就OK了
PrintWriter writerXml = new PrintWriter(new OutputStreamWriter(new FileOutputStream("city-jdom.xml"),"utf-8"));
Result resultXml = new StreamResult(writerXml);
// 实现此接口的对象包含构建转换结果树所需的信息
// Result resultXml = new StreamResult(new FileOutputStream("city-dom.xml"));
//用来得到XML字符串形式
// 一个字符流,可以用其回收在字符串缓冲区中的输出来构造字符串。
StringWriter writerStr = new StringWriter();
Result resultStr = new StreamResult(writerStr);
// 此抽象类的实例能够将源树转换为结果树。
Transformer transformer = TransformerFactory.newInstance().newTransformer();
// 设置编码
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
// 是否缩进
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
// 将 XML Source 转换为 Result
transformer.transform(source, resultXml);
transformer.transform(source, resultStr);
//获取XML字符串
xmlStr = writerStr.getBuffer().toString();
} catch (TransformerException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return xmlStr;
}
// SAX方式生成XML
public static String saxToXml(List list) {
String xmlStr = null;
try {
//用来生成XML文件
// 要生成文件需构造PrintWriter的writer
// PrintWriter writerXml = new PrintWriter("city-sax.xml");
// Result resultXml = new StreamResult(writerXml);
// 实现此接口的对象包含构建转换结果树所需的信息
Result resultXml = new StreamResult(new FileOutputStream("city-sax.xml"));
//用来得到XML字符串形式
// 一个字符流,可以用其回收在字符串缓冲区中的输出来构造字符串
StringWriter writerStr = new StringWriter();
// 构建转换结果树所需的信息。
Result resultStr = new StreamResult(writerStr);
// 创建SAX转换工厂
SAXTransformerFactory sff = (SAXTransformerFactory)SAXTransformerFactory.newInstance();
// 转换处理器,侦听 SAX ContentHandler
//解析事件,并将它们转换为结果树 Result
TransformerHandler th = sff.newTransformerHandler();
// 将源树转换为结果树
Transformer transformer = th.getTransformer();
// 设置字符编码
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
// 是否缩进
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
//设置与用于转换的此 TransformerHandler 关联的 Result
//注:这两个th.setResult不能同时启用
// th.setResult(resultXml);
th.setResult(resultStr);
th.startDocument();
AttributesImpl attr = new AttributesImpl();
th.startElement("", "", "users", attr);
if (null != list && !list.isEmpty()) {
for (int i = 0; i < list.size(); i++) {
th.startElement("", "", "user", attr);
th.startElement("", "", "uuid", attr);
String id = String.valueOf(list.get(i).getUuid());
th.characters(id.toCharArray(), 0, id.length());
th.endElement("", "", "uuid");
th.startElement("", "", "myname", attr);
String name = String.valueOf(list.get(i).getMyname());
th.characters(name.toCharArray(), 0, name.length());
th.endElement("", "", "myname");
th.startElement("", "", "sex", attr);
String sex = String.valueOf(list.get(i).getSex());
th.characters(sex.toCharArray(), 0, sex.length());
th.endElement("", "", "sex");
th.startElement("", "", "age", attr);
String age = String.valueOf(list.get(i).getAge());
th.characters(age.toCharArray(), 0, age.length());
th.endElement("", "", "age");
th.endElement("", "", "user");
}
}
th.endElement("", "", "users");
th.endDocument();
xmlStr = writerStr.getBuffer().toString();
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("SAX:" + xmlStr);
return xmlStr;
}
/**
* StAX生成XML,它是The Streaming API for XML简称
* JDK1.6的新增 ********
* @param list
* @return
*/
public static String stAXToXml( List list ){
String xmlStr = null;
try {
if (null != list && !list.isEmpty()) {
StringWriter writerStr = new StringWriter();
PrintWriter writerXml = new PrintWriter(new OutputStreamWriter(new FileOutputStream("city-StAX.xml"),"utf-8"));
// 定义用于获取 XMLEventWriter 和 XMLStreamWriter 的工厂抽象实现
XMLOutputFactory xof = XMLOutputFactory.newInstance();
//指定如何写XML,注:以下两行只能启用一行
// XMLStreamWriter xmlsw = xof.createXMLStreamWriter(writerStr);
XMLStreamWriter xmlsw = xof.createXMLStreamWriter(writerXml);
//写入XML文档声明
xmlsw.writeStartDocument("UTF-8", "1.0");
xmlsw.writeStartElement("users");
// 写入注释到xml文档
xmlsw.writeComment("省和城市信息");
for (UserJavaBeanForXML user : list) {
xmlsw.writeStartElement("user");
//添加节点
xmlsw.writeStartElement("id");
xmlsw.writeCharacters(String.valueOf(user.getUuid()));
// 结束节点
xmlsw.writeEndElement();
//添加节点
xmlsw.writeStartElement("name");
xmlsw.writeCharacters(user.getMyname());
// 结束节点
xmlsw.writeEndElement();
xmlsw.writeEndElement();
}
// 结束节点
xmlsw.writeEndElement();
// 结束 XML 文档
xmlsw.writeEndDocument();
xmlsw.flush();
xmlsw.close();
xmlStr = writerStr.getBuffer().toString();
writerStr.close();
}
} catch (XMLStreamException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("StAX:" + xmlStr );
return xmlStr;
}
public static void main(String[] args) {
UserJavaBeanForXML user1=new UserJavaBeanForXML();
UserJavaBeanForXML user2=new UserJavaBeanForXML();
user1.setUuid(1);
user1.setMyname("ydd");
user1.setSex("male");
user1.setAge(26);
user2.setUuid(2);
user2.setMyname("shwin");
user2.setSex("male");
user2.setAge(25);
List userList=new ArrayList();
userList.add(user1);
userList.add(user2);
createXMLForDOM(userList);
System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
saxToXml(userList);
System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
// stAXToXml(userList);
CreateXMLForJDOM.jdomToXml(userList);
System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
CreateXMLForDOM4j.dom4jToXml(userList);
}
}
*********************************************************************************************************************************
package com.ydd.utils;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.XMLOutputter;
public class CreateXMLForJDOM {
public static String jdomToXml(List list) {
String xmlStr = null;
try {
// 创建文档根节点
Element usersElt = new Element("users");
if (null != list && !list.isEmpty()) {
for (UserJavaBeanForXML user : list) {
// 创建子元素节点
Element userElt = new Element("user");
//可以跟user对象增加 标识 属性
userElt.setAttribute("uuid", "1");
// 创建子元素节点
Element idElt = new Element("uuid");
// 向元素中添加子元素
userElt.addContent(idElt);
// 添加id文本
idElt.addContent(String.valueOf(user.getUuid()));
// 创建元素节点
Element nameElt = new Element("myname");
// 向元素中添加子元素
userElt.addContent(nameElt);
// 添加name文本
nameElt.addContent(user.getMyname());
Element sexElt = new Element("sex");
userElt.addContent(sexElt);
sexElt.addContent(user.getSex());
Element ageElt = new Element("age");
userElt.addContent(ageElt);
ageElt.addContent(user.getAge()+"");
usersElt.addContent(userElt);
}
}
Document doc = new Document(usersElt);
XMLOutputter out = new XMLOutputter();
//获得XML字符串形式
xmlStr = out.outputString(doc);
//生成XML文件
PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream("city-jdom.xml"),"utf-8"));
out.output(doc, writer);
writer.flush();
writer.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("JDOM:" + xmlStr);
return xmlStr;
}
}
*****************************************************************************************************************************************
package com.ydd.utils;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.StringWriter;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentFactory;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
public class CreateXMLForDOM4j {
public static String dom4jToXml(List list) {
String strXml = null;
try {
if (null != list && !list.isEmpty()) {
DocumentFactory df = DocumentFactory.getInstance();
// org.dom4j.Document doc = DocumentHelper.createDocument();
Document doc = df.createDocument("UTF-8");
// 创建根节点
Element UsersElt = doc.addElement("users");
for (UserJavaBeanForXML user : list) {
// 在节点下增加子节点
Element userElt = UsersElt.addElement("user");
// 在这里给user加一个 标识 属性
userElt.addAttribute("uuid", "1");
// 在节点下增加子节点
Element idElt = userElt.addElement("uuid");
idElt.addText(String.valueOf(user.getUuid()));
// 在节点下增加子节点
Element nameElt = userElt.addElement("myname");
nameElt.addText(user.getMyname());
Element sexElt = userElt.addElement("sex");
sexElt.addText(user.getSex());
Element ageElt = userElt.addElement("age");
ageElt.addText(user.getAge()+"");
}
// 有样式(缩进)的写出
OutputFormat opf = OutputFormat.createPrettyPrint();
opf.setEncoding("UTF-8");
opf.setTrimText(true);
//生成XML文件
XMLWriter xmlOut = new XMLWriter(new FileOutputStream("city-dom4j.xml"), opf);
xmlOut.write(doc);
xmlOut.flush();
xmlOut.close();
//获取XML字符串形式
StringWriter writerStr = new StringWriter();
XMLWriter xmlw = new XMLWriter(writerStr, opf);
xmlw.write(doc);
strXml = writerStr.getBuffer().toString();
// 无样式的
// strXml = doc.asXML();
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("DOM4J:" + strXml);
return strXml;
}
}
************************************************************
package com.ydd.utils;
public class UserJavaBeanForXML {
private int uuid;
private String myname;
private String sex;
private int age;
public UserJavaBeanForXML() {
super();
}
public UserJavaBeanForXML(int uuid, String myname, String sex, int age) {
super();
this.uuid = uuid;
this.myname = myname;
this.sex = sex;
this.age = age;
}
public int getUuid() {
return uuid;
}
public void setUuid(int uuid) {
this.uuid = uuid;
}
public String getMyname() {
return myname;
}
public void setMyname(String myname) {
this.myname = myname;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}