现在的位置: 首页 > 综合 > 正文

XML创建与解析

2017年12月27日 ⁄ 综合 ⁄ 共 6056字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.