XML生成、传输与解析
import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; /** * http://www.cnblogs.com/nerxIoUs/archive/2013/05/04/3060263.html * * @author mao * @since 2014-4-8 * <?xml version="1.0" encoding="UTF-8"?> <books> <book id="001"> <title>Harry Potter</title> <author>J K. Rowling</author> </book> <book id="002"> <title>Learning XML</title> <author>Erik T. Ray</author> </book> </books> */ public class CreateAndParseXMLByDom4j { public static void main(String[] args) throws Exception { System.out.println("===============1:"); System.out.println("---------createXML."); createXml(); System.out.println("---------parseXMLToList: "); parseXMLToList(); System.out.println("---------parseXMLToIterator: "); parseXMLToIterator(); System.out.println("=======================2:"); String str = "<xml><ToUserName>aaaa</ToUserName><FromUserName>bbb</FromUserName><CreateTime>123456789</CreateTime><MsgType>ccc</MsgType><Event>ddd</Event><Latitude>23.137466</Latitude><Longitude>113.352425</Longitude><Precision>119.385040</Precision></xml>"; String str2 = "<books id=\"b\"> <book id=\"001\"> <title>Harry Potter</title> <author>J K. Rowling</author> </book> <book id=\"002\"> <title>Learning XML</title> <author>Erik T. Ray</author> </book></books>"; Map map = parseXml(str); System.out.println(); System.out.println(map.get("ToUserName")); System.out.println(map.get("Precision")); System.out.println("===============3:"); createXml2("d://xml.xml"); parserXml2("d://xml.xml"); } /* * 创建xml文档并输出到文件 */ public static void createXml() throws Exception { Document doc = DocumentHelper.createDocument(); // 增加根节点 Element books = doc.addElement("books"); // 增加子元素 Element book1 = books.addElement("book"); Element title1 = book1.addElement("title"); Element author1 = book1.addElement("author"); Element book2 = books.addElement("book"); Element title2 = book2.addElement("title"); Element author2 = book2.addElement("author"); // 为子节点添加属性 book1.addAttribute("id","001"); // 为元素添加内容 title1.setText("Harry Potter"); author1.setText("J K. Rowling"); book2.addAttribute("id","002"); title2.setText("Learning XML"); author2.setText("Erik T. Ray"); System.out.println("创建的xml str(传输可用): "+doc.asXML()); // 实例化输出格式对象 OutputFormat format = OutputFormat.createPrettyPrint(); // 设置输出编码 format.setEncoding("UTF-8"); // 创建需要写入的File对象 File file = new File("d:" + File.separator + "books.xml"); // 生成XMLWriter对象,构造函数中的参数为需要输出的文件流和格式 XMLWriter writer = new XMLWriter(new FileOutputStream(file),format); // 开始写入,write方法中包含上面创建的Document对象 writer.write(doc); } /** * 1=============== */ /* * 示例一:用List列表的方式来解析xml */ public static void parseXMLToList() throws DocumentException { SAXReader reader = new SAXReader(); File file = new File("d:/books.xml"); Document document = reader.read(file); // Document document = DocumentHelper.parseText(infoXML); Element root = document.getRootElement(); List<Element> childElements = root.elements(); for (Element child : childElements) { // 未知属性名情况下 /* * List<Attribute> attributeList = child.attributes(); for * (Attribute attr : attributeList) { * System.out.println(attr.getName() + ": " + attr.getValue()); } */ // 已知属性名情况下 System.out.println("id: " + child.attributeValue("id")); // 未知子元素名情况下 /* * List<Element> elementList = child.elements(); for (Element ele : * elementList) { System.out.println(ele.getName() + ": " + * ele.getText()); } System.out.println(); */ // 已知子元素名的情况下 System.out.println("title: " + child.elementText("title")); System.out.println("author: " + child.elementText("author")); // 这行是为了格式化美观而存在 System.out.println(); } } /* * 示例二:使用Iterator迭代器的方式来解析xml */ public static void parseXMLToIterator() throws Exception { SAXReader reader = new SAXReader(); Document document = reader.read(new File("d:/books.xml")); Element root = document.getRootElement(); Iterator it = root.elementIterator(); while (it.hasNext()) { Element element = (Element) it.next(); // 未知属性名称情况下 /* * Iterator attrIt = element.attributeIterator(); while * (attrIt.hasNext()) { Attribute a = (Attribute) attrIt.next(); * System.out.println(a.getValue()); } */ // 已知属性名称情况下 System.out.println("id: " + element.attributeValue("id")); // 未知元素名情况下 /* * Iterator eleIt = element.elementIterator(); while * (eleIt.hasNext()) { Element e = (Element) eleIt.next(); * System.out.println(e.getName() + ": " + e.getText()); } * System.out.println(); */ // 已知元素名情况下 System.out.println("title: " + element.elementText("title")); System.out.println("author: " + element.elementText("author")); System.out.println(); } } /** * 2========================== */ //解析xml public static Map parseXml(String xmlStr) { Map map = new HashMap(); try { Document document = DocumentHelper.parseText(xmlStr); Element root = document.getRootElement(); List<Element> childElements = root.elements(); for (Element childElement : childElements) { System.out.println(childElement.getName() + ": " + childElement.getText()); map.put(childElement.getName(),childElement.getTextTrim()); } } catch (DocumentException e) { e.printStackTrace(); } return map; } /** * 3==================================== */ public static void createXml2(String fileName) { Document document = DocumentHelper.createDocument(); Element employees = document.addElement("employees"); Element employee = employees.addElement("employee"); Element name = employee.addElement("name"); name.setText("ddvip"); Element sex = employee.addElement("sex"); sex.setText("m"); Element age = employee.addElement("age"); age.setText("29"); try { Writer fileWriter = new FileWriter(fileName); XMLWriter xmlWriter = new XMLWriter(fileWriter); xmlWriter.write(document); xmlWriter.close(); } catch (IOException e) { System.out.println(e.getMessage()); } } public static void parserXml2(String fileName) { File inputXml = new File(fileName); SAXReader saxReader = new SAXReader(); try { Document document = saxReader.read(inputXml); Element employees = document.getRootElement(); for (Iterator i = employees.elementIterator(); i.hasNext();) { Element employee = (Element) i.next(); for (Iterator j = employee.elementIterator(); j.hasNext();) { Element node = (Element) j.next(); System.out.println(node.getName() + ":" + node.getText()); } } } catch (DocumentException e) { System.out.println(e.getMessage()); } System.out.println("dom4j parserXml"); } }