`
John_Kong19
  • 浏览: 279797 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

生成及解析XML

阅读更多
package com.test.xml;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.dom4j.DocumentHelper;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import com.sun.org.apache.xerces.internal.dom.DocumentImpl;
import com.sun.org.apache.xml.internal.serialize.OutputFormat;
import com.sun.org.apache.xml.internal.serialize.XMLSerializer;

/**
 * 
 * @author john
 * 
 *         测试java生成XML文件
 * 
 */
public class XMLManager {

	long startTime;
	long endTime;

	/**
	 * 使用BufferedWriter往文件中写数据
	 * 
	 * @param strFileName
	 */
	public void createXMLByString(String strFileName) {
		FileWriter fw = null;
		BufferedWriter bw = null;
		try {
			fw = new FileWriter(strFileName);
			bw = new BufferedWriter(fw);
			bw.write("<?xml version='1.0' encoding='gb2312' ?>");
			bw.newLine(); // 下一行
			bw.write("<电脑配置>");
			bw.newLine();
			bw.write("        <DELL type='台式机'>"); // 留出空间
			bw.newLine();
			bw.write("            <CPU type='四核'>Intel</CPU>");
			bw.newLine();
			bw.write("            <内存 type='4G'>金士顿</内存>");
			bw.newLine();
			bw.write("            <硬盘 type='500G'>西部数据</硬盘>");
			bw.newLine();
			bw.write("        </DELL>");
			bw.newLine();
			bw.write("        <DELL type='笔记本'>");
			bw.newLine();
			bw.write("            <CPU type='双核'>AMD</CPU>");
			bw.newLine();
			bw.write("            <内存 type='2G'>三星</内存>");
			bw.newLine();
			bw.write("            <硬盘 type='500G'>西部数据</硬盘>");
			bw.newLine();
			bw.write("        </DELL>");
			bw.newLine();
			bw.write("</电脑配置>");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				bw.close();
				fw.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	/**
	 * 生成XML
	 * 
	 * @param strFileName
	 *            要创建的xml文件名
	 */
	public void createXMLByDom(String strFileName) {
		Document doc = new DocumentImpl();
		Element root = doc.createElement("Root"); // 创建根节点
		root.setAttribute("type", "root"); // 加入属性
		doc.appendChild(root);

		for (int i = 0; i < 10; i++) {
			Element child = doc.createElement("Child"); // 创建子节点
			child.setTextContent("chlid" + i); // 创建节点内容
			child.setAttribute("type", "child"); // 创建节点属性
			child.setAttribute("name", "chlid" + i);
			if (i == 5) {
				child.setNodeValue("6");
			}
			root.appendChild(child);
		}

		File outputFile = new File(strFileName); // 指定要生成的文件
		OutputFormat outputFormat = new OutputFormat("XML", "gb2312", true); // XML编码方式,每个节点是否换行
		FileWriter fileWriter = null;
		try {
			fileWriter = new FileWriter(outputFile);
			XMLSerializer xmlSerializer = new XMLSerializer(fileWriter,
					outputFormat);
			xmlSerializer.asDOMSerializer();
			xmlSerializer.serialize(doc.getDocumentElement());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				fileWriter.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	/**
	 * 使用Dom4j生成xml
	 * 
	 * @param strFileName
	 */
	public void createXMLByDom4j(String strFileName) {
		org.dom4j.Document doc = DocumentHelper.createDocument();
		org.dom4j.Element root = doc.addElement("电脑配置"); // 生成主节点
		root.addComment("this is compute xml file");
		org.dom4j.Element ele1 = root.addElement("DELL"); // 加上子节点
		ele1.addAttribute("type", "台式机");
		org.dom4j.Element sub1Ele1 = ele1.addElement("CPU");
		sub1Ele1.addAttribute("type", "四核"); // 属性
		sub1Ele1.setText("Intel"); // 值
		org.dom4j.Element sub2Ele1 = ele1.addElement("内存");
		sub2Ele1.addAttribute("type", "4G");
		sub2Ele1.setText("金士顿");
		org.dom4j.Element sub3Ele1 = ele1.addElement("硬盘");
		sub3Ele1.addAttribute("type", "500G");
		sub3Ele1.setText("西部数据");

		org.dom4j.Element ele2 = root.addElement("DELL");
		ele2.addAttribute("type", "笔记本");
		org.dom4j.Element sub1Ele2 = ele2.addElement("CPU");
		sub1Ele2.addAttribute("type", "双核");
		sub1Ele2.setText("AMD");
		org.dom4j.Element sub2Ele2 = ele2.addElement("内存");
		sub2Ele2.addAttribute("type", "2G");
		sub2Ele2.setText("三星");
		org.dom4j.Element sub3Ele2 = ele2.addElement("硬盘");
		sub3Ele2.addAttribute("type", "500G");
		sub3Ele2.setText("西部数据");

		XMLWriter writer = null;
		org.dom4j.io.OutputFormat format = org.dom4j.io.OutputFormat
				.createPrettyPrint(); // 使用OutputFormat的Pretty格式
		try {
			writer = new XMLWriter(new FileWriter(new File(strFileName)),
					format);
			writer.write(doc);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				writer.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	public void createXMLByJDom(String strFileName) {
		org.jdom.Element root = new org.jdom.Element("电脑配置"); // 生成主节点
		org.jdom.Document doc = new org.jdom.Document(root); // 主节点加入文件中
		org.jdom.Element ele1 = new org.jdom.Element("DELL");
		ele1.setAttribute("type", "台式机");
		ele1.addContent(new org.jdom.Element("CPU").setAttribute("type", "四核")
				.setText("Intel")); // 节点加入子节点,属性及值
		ele1.addContent(new org.jdom.Element("内存").setAttribute("type", "4G")
				.setText("金士顿"));
		ele1.addContent(new org.jdom.Element("硬盘").setAttribute("type", "500G")
				.setText("西部数据"));
		root.addContent(ele1);

		org.jdom.Element ele2 = new org.jdom.Element("DELL");
		ele2.setAttribute("type", "笔记本");
		ele2.addContent(new org.jdom.Element("CPU").setAttribute("type", "双核")
				.setText("AMD"));
		ele2.addContent(new org.jdom.Element("内存").setAttribute("type", "2G")
				.setText("三星"));
		ele2.addContent(new org.jdom.Element("硬盘").setAttribute("type", "500G")
				.setText("西部数据"));
		root.addContent(ele2);

		XMLOutputter XMLOut = new XMLOutputter();
		Format format = Format.getPrettyFormat(); // 使用pretty格式
		// format.setEncoding("GB2312"); //可以设置编码
		XMLOut.setFormat(format);

		try {
			XMLOut.output(doc, new FileOutputStream(strFileName));
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	/**
	 * 
	 * 读取xml并打印主要节点数据
	 * 
	 * @param fileName
	 *            要读取的xml文件名
	 */
	public void readXMLByDom(String fileName) {
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		DocumentBuilder db;
		try {
			db = dbf.newDocumentBuilder();
			Document doc = db.parse(new File(fileName));
			Element element = doc.getDocumentElement();
			System.out.println("根元素为:" + element.getTagName());
			NodeList nodeList = doc.getElementsByTagName("DELL");
			System.out.println("DELL节点的长度:" + nodeList.getLength());
			Node fatherNode = nodeList.item(0);
			System.out.println("父节点为:" + fatherNode.getNodeName());
			// 把父节点的属性拿出来
			NamedNodeMap attributes = fatherNode.getAttributes();
			for (int i = 0; i < attributes.getLength(); i++) {
				Node attribute = attributes.item(i);
				System.out.println("DELL的属性名为:" + attribute.getNodeName()
						+ " 相对应的属性值为:" + attribute.getNodeValue());
			}
			NodeList childNodes = fatherNode.getChildNodes();
			System.out.println(childNodes.getLength());
			for (int j = 0; j < childNodes.getLength(); j++) {
				Node childNode = childNodes.item(j);
				// 如果这个节点属于Element ,再进行取值
				if (childNode instanceof Element) {
					System.out.println("子节点名为:" + childNode.getNodeName()
							+ " 相对应的值为"
							+ childNode.getFirstChild().getNodeValue());
				}
			}

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void readXMLByDom4j(String fileName) {
		startTime = System.nanoTime();
		try {
			File f = new File(fileName);
			SAXReader reader = new SAXReader();
			org.dom4j.Document doc = reader.read(f);
			org.dom4j.Element root = doc.getRootElement();
			org.dom4j.Element foo = null;
			for (Iterator i = root.elementIterator("DELL"); i.hasNext();) {
				foo = (org.dom4j.Element) i.next();
				System.out.println("电脑类型:" + foo.attributeValue("type"));
				System.out.println("CPU:" + foo.elementText("CPU"));
				System.out.println("内存:" + foo.elementText("内存"));
				System.out.println("硬盘:" + foo.elementText("硬盘"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		endTime = System.nanoTime();
		System.out.println("通过Dom4j读取xml所用的时间:" + (endTime - startTime));
	}

	public void readXMLByJDom(String fileName) {
		startTime = System.nanoTime();
		try {
			SAXBuilder builder = new SAXBuilder();
			org.jdom.Document doc = builder.build(new File(fileName));
			org.jdom.Element foo = doc.getRootElement();
			List<org.jdom.Element> allChildren = foo.getChildren();
			for (int i = 0; i < allChildren.size(); i++) {
				System.out.println("电脑类型:"
						+ ((org.jdom.Element) allChildren.get(i))
								.getAttributeValue("type"));
				System.out.println("CPU:"
						+ ((org.jdom.Element) allChildren.get(i)).getChild(
								"CPU").getText());
				System.out.println("内存:"
						+ ((org.jdom.Element) allChildren.get(i))
								.getChild("内存").getText());
				System.out.println("硬盘:"
						+ ((org.jdom.Element) allChildren.get(i))
								.getChild("硬盘").getText());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		endTime = System.nanoTime();
		System.out.println("通过JDom读取xml所用的时间:" + (endTime - startTime));
	}

	public static void main(String[] argus) {
		XMLManager manager = new XMLManager();
		// manager.createXML("E:\\学习XML\\test1.xml");
		// manager.readXMLByDom("E:\\学习XML\\Computer.xml");
		// manager.readXMLByJDom("E:\\学习XML\\Computer.xml");
		// manager.readXMLByDom4j("E:\\学习XML\\Computer.xml");
		// manager.createXMLByString("E:\\学习XML\\Computer1.xml");
		// manager.createXMLByDom4j("E:\\学习XML\\Computer2.xml");
		manager.createXMLByJDom("E:\\学习XML\\Computer3.xml");
	}
}
分享到:
评论

相关推荐

    JAVA 解析XML生成XML文档实例

    JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML

    XML解析和生成工具

    - 解析XML文档,生成元素对象。 - 处理元素的属性和文本内容。 - 遍历元素树,访问子元素。 - 提供API供用户查找、修改或删除元素。 XML生成: XML生成是指将数据结构转换为XML文档的过程。这可以通过DOM模型或者...

    xml文件生成与解析

    本文将深入探讨如何使用Java中的StringBuilder、XmlSerializer和XmlPullParser来生成及解析XML文件。 首先,让我们从StringBuilder开始。StringBuilder是Java中用于构建字符串的类,它在创建XML字符串时非常有用。...

    利用Dom4j生成XML和解析XML

    "Dom4j 生成 XML 和解析 XML" Dom4j 是一个 Java 库,用于处理 XML 文档。它提供了生成和解析 XML 文档的功能。在本文中,我们将学习如何使用 Dom4j 生成 XML 文档和解析 XML 文档。 生成 XML 文档 使用 Dom4j ...

    通过xsd产生C#实体类解析XML或生成XML

    本教程将详细介绍如何使用XSD文件生成C#实体类,以便于解析XML数据和生成XML文档。 首先,我们需要一个XSD文件,它定义了XML文档的结构和数据类型。XSD文件使用元素、属性和约束来描述XML文档的结构。例如,一个...

    java 利用Xstream注解生成和解析xml

    解析XML回Java对象同样简单,只需使用`fromXML()`方法: ```java String xmlInput = "&lt;person id='1'&gt;&lt;firstName&gt;John&lt;/firstName&gt;&lt;lastName&gt;Doe&lt;/lastName&gt;&lt;/person&gt;"; Person parsedPerson = (Person) xstream....

    生成+解析XML

    本文将深入探讨DOM、SAX、JDOM和DOM4J这四种XML处理方式,以及如何生成和解析XML文档。 1. DOM(Document Object Model) DOM是W3C制定的一种统一的标准,它将XML文档视为一个树形结构,每个元素、属性和文本都被...

    生成、解析xml的四种方式(dom,dom4j,sax,jdom)

    本文将详细介绍生成和解析XML的四种主要方法:DOM、DOM4J、SAX和JDOM。 1. DOM(Document Object Model) DOM是W3C组织推荐的一种解析XML的标准方式。它将XML文档视为一个树形结构,每个节点代表XML文档的一部分。...

    android 解析XML文件 生成XML文件

    本文将深入探讨如何使用SAX、DOM和Pull解析器解析XML文件,以及如何生成XML文件。我们将同时展示Java和Kotlin两种语言的实现方法。 一、SAX解析XML文件 SAX(Simple API for XML)是一种事件驱动的解析器,它不会一...

    基于Python实现的自动化生成XML解析类

    通过`ET.fromstring()`函数可以解析XML字符串,得到一个Element对象树,然后可以使用方法如`.find()`, `.findall()`, `.text`等来查询和操作元素。 现在,让我们深入探讨这个自动化XML解析类的实现。该类可能是通过...

    STM32解析XML

    在本文中,我们将深入探讨如何在STM32F107上使用minixml库解析XML(可扩展标记语言)文档,这对于那些初次尝试在嵌入式环境中处理XML数据的开发者来说,是非常有价值的。 XML是一种通用的数据交换格式,它允许结构...

    Jdom生成与解析XML

    下面我们将深入探讨如何利用JDOM生成XML以及解析XML。 一、JDOM生成XML 1. **导入JDOM库**: 首先,你需要在项目中引入JDOM库。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org....

    java解析xml动态生成树形菜单结构

    总结起来,实现“java解析xml动态生成树形菜单结构”的项目,需要掌握以下核心知识点: 1. Java的DOM解析XML,构建树形数据结构。 2. 设计和实现无限层级的树形菜单数据模型。 3. 使用`JSTree`库在前端渲染树形菜单...

    java 解析、生成 Excel XML 四个实例

    本文将深入探讨四个使用Java解析和生成Excel及XML的实例,旨在帮助开发者掌握相关技能。 实例一:解析Excel文件 使用Apache POI库是Java中解析Excel文件的常见方式。POI提供了HSSF(旧版Excel .xls格式)和XSSF(新...

    使用Pull解析器读取XML文件和生成XML文件

    Pull解析器是一种轻量级的解析方式,它允许程序在解析XML时按需获取数据,而不需要一次性加载整个文档到内存,从而提高了效率和资源利用率。 首先,我们来了解XML的基本结构。XML文件由一系列元素构成,每个元素由...

    Xstream生成和解析xml.rar

    本篇文章将详细介绍如何利用Xstream进行XML的生成和解析。 **一、Xstream简介** Xstream是Java社区中的一款开源库,由Johannes Link创建,它的设计目标是使XML序列化和反序列化变得简单直观。Xstream的核心理念是...

    java解析xml生成json对象

    3. **测试工具类**:找到项目中的工具类文件,它应该包含一个方法用于解析XML并生成JSON对象。这个方法可能接受XML文件的路径作为参数,然后使用选择的XML解析器(如DOM或SAX)读取文件,接着使用JSON库将解析出的...

    XML生成和解析

    #### 二、DOM生成和解析XML文档 DOM是一种基于树形结构的XML文档处理方式,它将整个XML文档加载到内存中并创建一个文档对象模型。通过这个模型,开发者可以方便地查询、添加、删除或修改文档中的任何部分。下面我们...

    dom4J生成xml、解析xml、生成xml文件实例

    **dom4J生成和解析XML文件** DOM4J是一个强大的Java XML API,它不仅提供了DOM、SAX和JDOM等接口的实现,还提供了一种更简单、更灵活的方式来处理XML文档。这篇博客()可能详细介绍了如何使用DOM4J来生成和解析XML...

    XML生成及解析工具

    一个方便的XML生成及解析工具类,里面有测试main方法详细的介绍如何使用,可以无需配置直接编译使用。

Global site tag (gtag.js) - Google Analytics