- 浏览: 105095 次
最新评论
-
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实例.pdf
用DOM SAX JDom dom4j 对xml文档解析实例 在学习孙鑫老师视频教程,自己照着敲的源码,希望对大家有帮助
sax,dom,jdom,dom4j Java中常用的四种解析方式的详细演示实例,提供源代码,绝对可以运行,千万不要错过哦
Java解析XML汇总DOM_SAX_JDOM_DOM4j_XPath 实例
java四种xml解析实例和jar包,包括dom,sax,dom4j,jdom等方式 java四种xml解析实例和jar包,包括dom,sax,dom4j,jdom等方式 是学习Java的xml解析的好例子,包括相应的dom4j.jar,jdom.jar等,自己整理的,物超所值啊,...
JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML
利用Dom4j、JDom、SAX、Dom四种方法解析XML的资料、电子书以及相关的实例代码;由于在各类Java开发中经常用到,所以总结一下,希望有所帮助。
包括 DOM SAX JDOM DOM4J 对XML的解析实例
xml文件的解析的各种方式,例如jdom解析,dom解析等等
Java解析XML的四种方法 1. DOM生成和解析XML文档 2. SAX生成和解析XML文档 3. DOM4J生成和解析XML文档 4. JDOM生成和解析XML
1、org.JDOM这个包里的类是你J解析xml文件后所要用到的所有数据类型。 Attribute CDATA Coment DocType Document Element EntityRef Namespace ProscessingInstruction Text 2、org.JDOM.transform在涉及...
解析器的介绍 文档对象模型(DOM)解析实例 SAX解析实例 DOM4J解析实例 JDOM解析实例 JAVA操纵XML 实例讲解
XML的四种解析方式jdom.dom4j,sax,dom的区别于实例
使用dom,dom4j,jdom生成和解析XML文档实例,使用基于事件的SAX解析XML文档实例,使用jquery,javascript动态的生成DOM实例,使用jquery,javascript解析ajax回传的XML文档实例,jquery,javascript的ajax技术使用实例,...
java四种xml解析实例和jar包,包括dom4j,jdom....等方式
jdom包,dom4j包,sax包,四种XML文件读取实例 ...全部给你备好,研究研究,对初学者应该有很大帮助.....
实例68 使用DOM解析XML 实例69 使用SAX解析XML 实例70 使用JDOM解析XML 实例81 SERVLET读取COOKIE数据 实例86 JSP使用数据连接池 实例99 连接数据库 实例100 上传文件 面试题(很多企业都常常从这些面试题库中选题...
3.2.4 用dom解析xml文档实例 53 3.3 使用sax解析xml文档 65 3.3.1 sax的处理机制 66 3.3.2 配置sax解析器 69 3.3.3 sax解析器工厂 70 3.3.4 sax的异常类 71 3.3.5 errorhandler接口 73 3.3.6 使用sax解析xml...