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文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML
- 解析XML文档,生成元素对象。 - 处理元素的属性和文本内容。 - 遍历元素树,访问子元素。 - 提供API供用户查找、修改或删除元素。 XML生成: XML生成是指将数据结构转换为XML文档的过程。这可以通过DOM模型或者...
本文将深入探讨如何使用Java中的StringBuilder、XmlSerializer和XmlPullParser来生成及解析XML文件。 首先,让我们从StringBuilder开始。StringBuilder是Java中用于构建字符串的类,它在创建XML字符串时非常有用。...
"Dom4j 生成 XML 和解析 XML" Dom4j 是一个 Java 库,用于处理 XML 文档。它提供了生成和解析 XML 文档的功能。在本文中,我们将学习如何使用 Dom4j 生成 XML 文档和解析 XML 文档。 生成 XML 文档 使用 Dom4j ...
本教程将详细介绍如何使用XSD文件生成C#实体类,以便于解析XML数据和生成XML文档。 首先,我们需要一个XSD文件,它定义了XML文档的结构和数据类型。XSD文件使用元素、属性和约束来描述XML文档的结构。例如,一个...
解析XML回Java对象同样简单,只需使用`fromXML()`方法: ```java String xmlInput = "<person id='1'><firstName>John</firstName><lastName>Doe</lastName></person>"; Person parsedPerson = (Person) xstream....
本文将深入探讨DOM、SAX、JDOM和DOM4J这四种XML处理方式,以及如何生成和解析XML文档。 1. DOM(Document Object Model) DOM是W3C制定的一种统一的标准,它将XML文档视为一个树形结构,每个元素、属性和文本都被...
本文将详细介绍生成和解析XML的四种主要方法:DOM、DOM4J、SAX和JDOM。 1. DOM(Document Object Model) DOM是W3C组织推荐的一种解析XML的标准方式。它将XML文档视为一个树形结构,每个节点代表XML文档的一部分。...
本文将深入探讨如何使用SAX、DOM和Pull解析器解析XML文件,以及如何生成XML文件。我们将同时展示Java和Kotlin两种语言的实现方法。 一、SAX解析XML文件 SAX(Simple API for XML)是一种事件驱动的解析器,它不会一...
通过`ET.fromstring()`函数可以解析XML字符串,得到一个Element对象树,然后可以使用方法如`.find()`, `.findall()`, `.text`等来查询和操作元素。 现在,让我们深入探讨这个自动化XML解析类的实现。该类可能是通过...
在本文中,我们将深入探讨如何在STM32F107上使用minixml库解析XML(可扩展标记语言)文档,这对于那些初次尝试在嵌入式环境中处理XML数据的开发者来说,是非常有价值的。 XML是一种通用的数据交换格式,它允许结构...
下面我们将深入探讨如何利用JDOM生成XML以及解析XML。 一、JDOM生成XML 1. **导入JDOM库**: 首先,你需要在项目中引入JDOM库。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>org....
总结起来,实现“java解析xml动态生成树形菜单结构”的项目,需要掌握以下核心知识点: 1. Java的DOM解析XML,构建树形数据结构。 2. 设计和实现无限层级的树形菜单数据模型。 3. 使用`JSTree`库在前端渲染树形菜单...
本文将深入探讨四个使用Java解析和生成Excel及XML的实例,旨在帮助开发者掌握相关技能。 实例一:解析Excel文件 使用Apache POI库是Java中解析Excel文件的常见方式。POI提供了HSSF(旧版Excel .xls格式)和XSSF(新...
Pull解析器是一种轻量级的解析方式,它允许程序在解析XML时按需获取数据,而不需要一次性加载整个文档到内存,从而提高了效率和资源利用率。 首先,我们来了解XML的基本结构。XML文件由一系列元素构成,每个元素由...
本篇文章将详细介绍如何利用Xstream进行XML的生成和解析。 **一、Xstream简介** Xstream是Java社区中的一款开源库,由Johannes Link创建,它的设计目标是使XML序列化和反序列化变得简单直观。Xstream的核心理念是...
3. **测试工具类**:找到项目中的工具类文件,它应该包含一个方法用于解析XML并生成JSON对象。这个方法可能接受XML文件的路径作为参数,然后使用选择的XML解析器(如DOM或SAX)读取文件,接着使用JSON库将解析出的...
#### 二、DOM生成和解析XML文档 DOM是一种基于树形结构的XML文档处理方式,它将整个XML文档加载到内存中并创建一个文档对象模型。通过这个模型,开发者可以方便地查询、添加、删除或修改文档中的任何部分。下面我们...
**dom4J生成和解析XML文件** DOM4J是一个强大的Java XML API,它不仅提供了DOM、SAX和JDOM等接口的实现,还提供了一种更简单、更灵活的方式来处理XML文档。这篇博客()可能详细介绍了如何使用DOM4J来生成和解析XML...
一个方便的XML生成及解析工具类,里面有测试main方法详细的介绍如何使用,可以无需配置直接编译使用。