- 浏览: 108074 次
最新评论
-
liuxianwei:
照抄的也没啥意思吧。大家都能找得到
Hibernate4实战 之 第一部分 Hibernate入门 -
w156445045:
Hibernate4 和hibernate3 有啥区别啊?
Hibernate4实战 之 第一部分 Hibernate入门 -
linlin_xiao:
具体学什么
软件工程师在外企应该学习什么,做些什么 -
enen1982:
dom4j当然强大,支付xquery表达式和xpath寻止,方 ...
DOM、JDOM、DOM4J解析XML实例 -
hyj0903:
性能方面呢?比如说用这此方法生成一棵树,XML文件大小2M.
DOM、JDOM、DOM4J解析XML实例
一、DOM方式
原始name.xml
Html代码
- <?xml version="1.0" encoding="GB2312" standalone="no"?><学生花名册>
- <学生 性别="男">
- <姓名>李华</姓名>
- <年龄>14</年龄>
- </学生>
- <学生 性别="男">
- <姓名>张三</姓名>
- <年龄>16</年龄>
- </学生>
- <学生 性别="女">
- <姓名>王娟</姓名>
- <年龄>18</年龄>
- </学生>
- </学生花名册>
数据模型Student.java
Java代码
- package com.upcgrid.dom;
- public class Student {
- private String name;
- private String sex;
- private int age;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getSex() {
- return sex;
- }
- public void setSex(String sex) {
- this.sex = sex;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- }
DOM方式解析xml文档示例程序
Java代码
- package com.upcgrid.dom;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.OutputStreamWriter;
- import java.util.Vector;
- import javax.xml.parsers.DocumentBuilder;
- import javax.xml.parsers.DocumentBuilderFactory;
- import javax.xml.parsers.ParserConfigurationException;
- import javax.xml.transform.OutputKeys;
- import javax.xml.transform.Transformer;
- import javax.xml.transform.TransformerException;
- import javax.xml.transform.TransformerFactory;
- import javax.xml.transform.dom.DOMSource;
- import javax.xml.transform.stream.StreamResult;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- import org.w3c.dom.NodeList;
- import org.w3c.dom.Text;
- import org.xml.sax.SAXException;
- /**
- *
- * @author shijin 原始DOM解析XML方式
- *
- */
- public class DOMTest {
- public static void main(String[] args) throws ParserConfigurationException,
- SAXException, IOException, TransformerException {
- DOMTest test = new DOMTest();
- test.deleteElement("name.xml", "女");
- Vector<Student> stus = test.changeXMLToModel("name.xml");
- for (Student stu : stus) {
- System.out.print(stu.getName() + " " + stu.getSex() + " "
- + stu.getAge() + "\n");
- }
- // 输出:
- // 李华 男 14
- // 张三 男 16
- test.createDocument("name2.xml", stus);
- }
- /**
- * show 根据vector中的student对象创建xml文档
- *
- * @param filename
- * 要创建的文档名
- * @throws ParserConfigurationException
- * @throws SAXException
- * @throws IOException
- * @throws TransformerException
- */
- public void createDocument(String filename, Vector<Student> stus)
- throws ParserConfigurationException, SAXException, IOException,
- TransformerException {
- // 得到DOM解析器的工厂实例
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
- // 从DOM工厂获取DOM解析器
- DocumentBuilder builder = dbf.newDocumentBuilder();
- // 创建document对象
- Document doc = builder.newDocument();
- Element root = doc.createElement("学生花名册");// 创建根元素
- doc.appendChild(root);// 添加根元素
- for (Student stu : stus) {
- Element stuElement = doc.createElement("学生");
- stuElement.setAttribute("性别", stu.getSex());
- Element nameElement = doc.createElement("姓名");
- Text nameText = doc.createTextNode(stu.getName());
- nameElement.appendChild(nameText);
- Element ageElement = doc.createElement("年龄");
- Text ageText = doc.createTextNode(String.valueOf(stu.getAge()));
- ageElement.appendChild(ageText);
- stuElement.appendChild(nameElement);
- stuElement.appendChild(ageElement);
- root.appendChild(stuElement);
- }
- FileOutputStream fos = new FileOutputStream(filename);
- OutputStreamWriter ow = new OutputStreamWriter(fos);
- // 保存xml文件
- DOMSource doms = new DOMSource(doc);
- // 创建结果输出流
- StreamResult result = new StreamResult(ow);
- // 得到转换工厂实例
- TransformerFactory transFac = TransformerFactory.newInstance();
- // 得到转换器实例
- Transformer trans = transFac.newTransformer();
- // 转化器设置输出文档的编码方式
- trans.setOutputProperty(OutputKeys.ENCODING, "GB2312");
- //设置支持缩进
- trans.setOutputProperty(OutputKeys.INDENT, "yes");
- // 将文档源转换到结果输出流
- trans.transform(doms, result);
- }
- /**
- * show 读取指定XML文档并将其对象化
- *
- * @param filename
- * @return 存储Student对象的vector
- * @throws ParserConfigurationException
- * @throws SAXException
- * @throws IOException
- */
- public Vector<Student> changeXMLToModel(String filename)
- throws ParserConfigurationException, SAXException, IOException {
- // 得到DOM解析器的工厂实例
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
- // 从DOM工厂获取DOM解析器
- DocumentBuilder builder = dbf.newDocumentBuilder();
- // 解析xml文档,获得document对象,即DOM树
- Document doc = builder.parse(filename);
- // 获取根节点
- Element root = doc.getDocumentElement();
- // 获取根节点的子节点中名字为"学生"的节点列表
- NodeList stuNodes = root.getElementsByTagName("学生");
- Vector<Student> students = new Vector<Student>();
- // 遍历<学生>节点
- for (int i = 0; i < stuNodes.getLength(); i++) {
- // 获取一个学生节点
- Element stuNode = (Element) stuNodes.item(i);
- // 创建一个学生对象
- Student stu = new Student();
- stu.setSex(stuNode.getAttribute("性别"));
- // 获取<学生>节点的子节点中名字为"姓名"的节点列表
- NodeList nameNodes = stuNode.getElementsByTagName("姓名");
- // 取得第一个姓名
- Element nameNode = (Element) nameNodes.item(0);
- stu.setName(nameNode.getTextContent());
- // 获取<学生>节点的子节点中名字为"年龄"的节点列表
- NodeList ageNodes = stuNode.getElementsByTagName("年龄");
- // 取得第一个年龄
- Element ageNode = (Element) ageNodes.item(0);
- stu.setAge(Integer.parseInt(ageNode.getTextContent()));
- students.add(stu);
- }
- return students;
- }
- /**
- * show 删除指定名为filename的xml文档中学生结点的性别属性为tagname的结点
- *
- * @param filename
- * @param tagname
- * @throws ParserConfigurationException
- * @throws SAXException
- * @throws IOException
- * @throws TransformerException
- */
- public void deleteElement(String filename, String tagname)
- throws ParserConfigurationException, SAXException, IOException,
- TransformerException {
- // 得到DOM解析器的工厂实例
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
- // 从DOM工厂获取DOM解析器
- DocumentBuilder builder = dbf.newDocumentBuilder();
- // 解析xml文档,获得document对象,即DOM树
- Document doc = builder.parse(filename);
- // 找到删除节点
- NodeList stuNodes = doc.getElementsByTagName("学生");
- for (int i = 0; i < stuNodes.getLength(); i++) {
- Element stuElement = (Element) stuNodes.item(i);
- String sex = stuElement.getAttribute("性别");
- if (sex.equals(tagname)) {
- stuElement.getParentNode().removeChild(stuElement);
- }
- }
- // 保存xml文件
- DOMSource doms = new DOMSource(doc);
- // 创建结果输出流
- StreamResult result = new StreamResult(new FileOutputStream(filename));
- // 得到转换工厂实例
- TransformerFactory transFac = TransformerFactory.newInstance();
- // 得到转换器实例
- Transformer trans = transFac.newTransformer();
- // 转化器设置输出文档的编码方式
- trans.setOutputProperty(OutputKeys.ENCODING, "GB2312");
- // 将文档源转换到结果输出流
- trans.transform(doms, result);
- }
- }
输出:
李华 男 14
张三 男 16
结果name.xml
Java代码
- <?xml version="1.0" encoding="GB2312" standalone="no"?><学生花名册>
- <学生 性别="男">
- <姓名>李华</姓名>
- <年龄>14</年龄>
- </学生>
- <学生 性别="男">
- <姓名>张三</姓名>
- <年龄>16</年龄>
- </学生>
- </学生花名册>
name2.xml
Java代码
- <?xml version="1.0" encoding="GB2312" standalone="no"?>
- <学生花名册>
- <学生 性别="男">
- <姓名>李华</姓名>
- <年龄>14</年龄>
- </学生>
- <学生 性别="男">
- <姓名>张三</姓名>
- <年龄>16</年龄>
- </学生>
- </学生花名册>
二、JDOM方式
HD.xml
Html代码
- <?xml version="1.0" encoding="UTF-8"?>
- <HD>
- <disk name="C">
- <capacity>8G</capacity>
- <directories>200</directories>
- <files>1580</files>
- </disk>
- <disk name="D">
- <capacity>10G</capacity>
- <directories>500</directories>
- <files>3000</files>
- </disk>
- </HD>
JDOM解析XML文档示例
Html代码
- package com.upcgrid.jdom;
- import java.io.IOException;
- import java.util.List;
- import org.jdom.Document;
- import org.jdom.Element;
- import org.jdom.JDOMException;
- import org.jdom.input.SAXBuilder;
- public class JDOMTest {
- public static void main(String[] args) throws JDOMException, IOException {
- // 获得JDOM以SAX方式处理XML文档的构造器
- SAXBuilder saxb = new SAXBuilder();
- // 通过SAX构造器获得XML文档对象
- Document doc = saxb.build(JDOMTest.class.getClassLoader()
- .getResourceAsStream("test.xml"));
- // 获取根元素HD
- Element root = doc.getRootElement();
- // 取名字为disk的所有元素
- List<Element> list = root.getChildren("disk");
- for (int i = 0; i < list.size(); i++) {
- //取得第i个disk节点
- Element diskElement = (Element) list.get(i);
- //取得disk属性name
- String name = diskElement.getAttributeValue("name");
- // 取disk子元素capacity的内容
- String capacity = diskElement.getChildText("capacity");
- String directories = diskElement.getChildText("directories");
- String files = diskElement.getChildText("files");
- System.out.println("磁盘信息:");
- System.out.println("分区盘符:" + name);
- System.out.println("分区容量:" + capacity);
- System.out.println("目录数:" + directories);
- System.out.println("文件数:" + files);
- System.out.println("-----------------------------------");
- }
- }
- }
输出结果:
磁盘信息:
分区盘符:C
分区容量:8G
目录数:200
文件数:1580
-----------------------------------
磁盘信息:
分区盘符:D
分区容量:10G
目录数:500
文件数:3000
-----------------------------------
三、DOM4J方式
User.hbm.xml
Html代码
- <?xml version="1.0" encoding="UTF-8"?>
- <hibernate-mapping>
- <class name="com.upcgrid.User" table="t_user">
- <property name="username">aaa</property>
- <property name="password">bbb</property>
- </class>>
- </hibernate-mapping>
DOM4J解析XML示例
Java代码
- package com.upcgrid.dom4j;
- import java.io.File;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.util.Iterator;
- import java.util.List;
- import org.dom4j.Attribute;
- import org.dom4j.Document;
- import org.dom4j.DocumentException;
- import org.dom4j.DocumentHelper;
- import org.dom4j.Element;
- import org.dom4j.Node;
- import org.dom4j.io.OutputFormat;
- import org.dom4j.io.SAXReader;
- import org.dom4j.io.XMLWriter;
- public class DOM4JTest {
- public static void main(String[] args) {
- //获得DOM4J以SAX方式处理XML文档的管道
- SAXReader reader = new SAXReader();
- try {
- //通过管道获得XML文档对象
- Document document = reader.read(new File("User.hbm.xml"));
- //获取根节点
- Element root = document.getRootElement();
- System.out.println(root.getName());
- Element element = null;
- //遍历根节点下的节点
- for(Iterator<Element> i = root.elementIterator();i.hasNext();){
- //根节点的子节点
- element = (Element) i.next();
- System.out.println(element.getName());
- //遍历节点属性
- for(Iterator<Attribute> j = element.attributeIterator();j.hasNext();){
- Attribute attr = (Attribute)j.next();
- System.out.println(attr.getName()+":"+attr.getValue());
- }
- //遍历名为"property"的节点
- for(Iterator<Element> k = element.elementIterator("property");k.hasNext();){
- Element e1 = (Element)k.next();
- System.out.println(e1.getData());
- }
- }
- //通过Xpath的方式寻找节点
- List<Node> list = document.selectNodes("//hibernate-mapping/class/property");
- for(Node n: list){
- String name = n.valueOf("@name");
- System.out.println(n.getName()+" @name:"+name);
- }
- //只拿第一个
- Node node = document.selectSingleNode("//hibernate-mapping/class");
- String name = node.valueOf("@name");
- String table = node.valueOf("@table");
- System.out.println(node.getName()+" @name:"+name+",@table:"+table);
- createDocument();
- } catch (DocumentException e) {
- e.printStackTrace();
- }
- }
- public static Document createDocument(){
- //创建document对象
- Document document = DocumentHelper.createDocument();
- Element root = document.addElement("hibernate-mapping");
- //链式编程
- Element classElement = root.addElement("class")
- .addAttribute("name", "com.upcgrid.User")
- .addAttribute("table", "t_user");
- classElement.addElement("property").addAttribute("name", "username").addText("aaa");
- classElement.addElement("Property").addAttribute("name", "password").addText("bbb");;
- try {
- FileWriter out = new FileWriter("User1.hbm.xml");
- document.write(out);
- out.flush();
- out.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- try {
- //设定美化格式
- OutputFormat format = OutputFormat.createPrettyPrint();
- XMLWriter writer = new XMLWriter(new FileWriter("User2.hbm.xml"),format);
- writer.write(document);
- writer.close();
- //缩减格式
- } catch (IOException e) {
- e.printStackTrace();
- }
- return document;
- }
- }
输出:
hibernate-mapping
class
name:com.upcgrid.User
table:t_user
aaa
bbb
property @name:username
property @name:password
class @name:com.upcgrid.User,@table:t_user
User.hbm.xml
Html代码
- <?xml version="1.0" encoding="UTF-8"?>
- <hibernate-mapping><class name="com.upcgrid.User" table="t_user"><property name="username">aaa</property><Property name="password">bbb</Property></class></hibernate-mapping>
User2.hbm.xml
Html代码
- <?xml version="1.0" encoding="UTF-8"?>
- <hibernate-mapping>
- <class name="com.upcgrid.User" table="t_user">
- <property name="username">aaa</property>
- <Property name="password">bbb</Property>
- </class>
- </hibernate-mapping>
评论
3 楼
enen1982
2012-06-21
dom4j当然强大,支付xquery表达式和xpath寻止,方便多了
2 楼
hyj0903
2012-06-21
性能方面呢?比如说用这此方法生成一棵树,XML文件大小2M.
1 楼
dyllove98
2012-06-20
整理的不错
相关推荐
### DOM、JDOM、DOM4J解析XML实例详解 #### DOM 方式解析 XML 实例解析 ##### 一、DOM 概述与应用实例 DOM(Document Object Model)是一种树状结构的标准,用于表示 XML 文档的数据结构。它将 XML 文档视为节点...
本文将深入探讨DOM、SAX、JDom和dom4j四种流行的Java XML解析器,以及它们在处理XML文档时的特点和用法。 1. DOM(Document Object Model) DOM是W3C推荐的一种解析XML的标准方法。它将XML文档表示为一个树形结构,...
在压缩包中的“xml_6.pdf”文件可能包含了更详细的JDOM和DOM4J解析XML的教程,包括代码示例和最佳实践,建议进一步阅读以加深理解。 总的来说,JDOM和DOM4J都是强大的XML处理工具,选择哪个取决于具体项目的需求。...
以下是一些基于DOM、JDOM和dom4j的实例源码知识点: 1. **DOM实例**: - 加载XML文档:使用`DocumentBuilderFactory`创建`DocumentBuilder`,再通过`parse()`方法解析XML文件。 - 访问节点:`...
在Java中,解析XML文件是常见的任务,有多种库供开发者选择,其中包括JDOM、DOM4J以及DOM。这三种解析器各有特点,下面将详细解释它们的工作原理和使用方法。 首先,我们来看看DOM(Document Object Model)解析器...
DOM4J是一个强大的Java XML API,它不仅提供了DOM、SAX和JDOM等接口的实现,还提供了一种更简单、更灵活的方式来处理XML文档。这篇博客()可能详细介绍了如何使用DOM4J来生成和解析XML文件,这对于处理XML文档的...
【DOM4J解析XML】 DOM4J是一个Java库,它提供了强大的XML处理功能,包括解析、操作和生成XML文档。DOM4J相比W3C的DOM API,具有更轻量级、性能更好以及更易于使用的特性。在Java中,解析XML文档主要有两种方式:SAX...
下面我们将深入探讨DOM4J解析XML的基本概念、使用方法以及它与其他XML解析器的比较。 XML(eXtensible Markup Language)是一种标记语言,广泛应用于数据交换、配置文件和文档结构化存储。DOM4J是基于DOM(Document...
在实际使用DOM4J解析XML时,我们通常遵循以下步骤: 1. **解析XML**: 使用`DocumentFactory`创建一个`DocumentBuilder`实例,然后用它来解析XML文件,得到`Document`对象。 ```java SAXReader reader = new ...
java四种xml解析实例和jar包,包括dom,sax,dom4j,jdom等方式 java四种xml解析实例和jar包,包括dom,sax,dom4j,jdom等方式 是学习Java的xml解析的好例子,包括相应的dom4j.jar,jdom.jar等,自己整理的,物超所值啊,...
使用DOM4J解析XML的典型流程如下: 1. 创建`DocumentFactory`实例,它是DOM4J的工厂类。 2. 使用`DocumentFactory`的`parse()`方法解析XML文件,得到`Document`对象。 3. 利用`Document`对象,可以访问XML的元素、...
下面是一段使用DOM4J解析XML的代码示例: ```java import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; // 创建一个SAXReader实例 SAXReader saxReader = new SAXReader(); // ...
DOM4J解析XML文档: DOM4J通过构建DOM树(Document Object Model)来解析XML。DOM模型是一种将XML文档转换为内存中对象树的表示方式。在DOM4J中,我们可以使用`DocumentBuilderFactory`和`DocumentBuilder`来创建`...
### jdom4j解析XML实例详解 #### 生成XML文档 在示例代码中,`generateXML`方法用于创建一个XML文档。首先,通过`DocumentHelper.createDocument()`调用创建了一个空白的`Document`对象,这相当于创建了一个XML文件...
JDOM是一个专为Java设计的XML处理库,它结合了SAX和DOM的优点,提供了一种更高效且方便的方式来解析、创建和操作XML文档。JDOM的核心思想是创建一个基于Java对象模型的XML文档表示,使得开发者能够利用Java的强大...
JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML
本实例将深入讲解如何使用JDOM进行XML解析。 首先,我们需要在项目中引入JDOM的类库。JDOM官方网站提供了不同版本的JDOM jar包,你可以根据项目需求选择合适的版本下载。下载后,可以通过以下几种方式将其添加到...
- **SAX与DOM对比**:JDOM采用的是DOM模型,相比SAX解析器,它会将整个XML文档加载到内存中,适合小型XML文件。对于大型文件,可以考虑使用SAX或StAX以减少内存消耗。 - **优化策略**:如果确实需要处理大型XML...