mmll

【非原创】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; } }

分类:

技术点:

相关文章:

  • 2021-08-06
  • 2021-09-06
  • 2021-06-21
  • 2021-08-29
  • 2021-08-24
  • 2021-06-23
  • 2021-07-15
  • 2021-10-03
猜你喜欢
  • 2021-07-12
  • 2021-08-09
  • 2021-10-16
  • 2018-04-25
  • 2021-08-22
  • 2021-08-06
相关资源
相似解决方案