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");
- }
- }