`

dom,sax,dom4j,jdom,xerces

    博客分类:
  • XML
 
阅读更多
dom,sax,dom4j,jdom的关系就不描述了.xerces是xml解析的实现,可以设置覆盖jdk的默认解决实现.

1. dom(w3c标准,JDK自带)
package org.w3c.dom;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;

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.TransformerConfigurationException;
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.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

/**
 * 
 * @author hongliang.dinghl DOM生成与解析XML文档
 */
public class DomDemo implements XmlDocument {
	private Document document; 

	public void init() {
		try {
			DocumentBuilderFactory factory = DocumentBuilderFactory
					.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			this.document = builder.newDocument();
		} catch (ParserConfigurationException e) {
			System.out.println(e.getMessage());
		}
	}

	public void createXml(String fileName) {
		Element root = this.document.createElement("employees");
		this.document.appendChild(root);
		Element employee = this.document.createElement("employee");
		Element name = this.document.createElement("name");
		name.appendChild(this.document.createTextNode("丁宏亮"));
		employee.appendChild(name);
		Element sex = this.document.createElement("sex");
		sex.appendChild(this.document.createTextNode("m"));
		employee.appendChild(sex);
		Element age = this.document.createElement("age");
		age.appendChild(this.document.createTextNode("30"));
		employee.appendChild(age);
		root.appendChild(employee);
		TransformerFactory tf = TransformerFactory.newInstance();
		try {
			Transformer transformer = tf.newTransformer();
			DOMSource source = new DOMSource(document);
			transformer.setOutputProperty(OutputKeys.ENCODING, "gb2312");
			transformer.setOutputProperty(OutputKeys.INDENT, "yes");
			PrintWriter pw = new PrintWriter(new FileOutputStream(fileName));
			StreamResult result = new StreamResult(pw);
			transformer.transform(source, result);
			System.out.println("生成XML文件成功!");
		} catch (TransformerConfigurationException e) {
			System.out.println(e.getMessage());
		} catch (IllegalArgumentException e) {
			System.out.println(e.getMessage());
		} catch (FileNotFoundException e) {
			System.out.println(e.getMessage());
		} catch (TransformerException e) {
			System.out.println(e.getMessage());
		}
	}

	public void parserXml(String fileName) {
		try {
			DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
			DocumentBuilder db = dbf.newDocumentBuilder();
			Document document = db.parse(fileName);
			NodeList employees = document.getChildNodes();
			for (int i = 0; i < employees.getLength(); i++) {
				Node employee = employees.item(i);
				NodeList employeeInfo = employee.getChildNodes();
				for (int j = 0; j < employeeInfo.getLength(); j++) {
					Node node = employeeInfo.item(j);
					NodeList employeeMeta = node.getChildNodes();
					for (int k = 0; k < employeeMeta.getLength(); k++) {
						System.out.println(employeeMeta.item(k).getNodeName()
								+ ":" + employeeMeta.item(k).getTextContent());
					}
				}
			}
			System.out.println("解析完毕");
		} catch (FileNotFoundException e) {
			System.out.println(e.getMessage());
		} catch (ParserConfigurationException e) {
			System.out.println(e.getMessage());
		} catch (SAXException e) {
			System.out.println(e.getMessage());
		} catch (IOException e) {
			System.out.println(e.getMessage());
		}
	}
}


2. sax解析[jdk自带]
package org.xml.sax;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.w3c.dom.XmlDocument;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

/**
 * 
 * 优点:不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载。
 * 缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;
 * 无状态性;
 * 
 * @author hongliang.dinghl SAX文档解析
 */
public class SaxDemo implements XmlDocument {
	
	@Override
	public void init() {
		// TODO Auto-generated method stub
		
	}

	public void createXml(String fileName) {
		System.out.println("<<" + fileName + ">>");
	}

	public void parserXml(String fileName) {
		SAXParserFactory saxfac = SAXParserFactory.newInstance();

		try {

			SAXParser saxparser = saxfac.newSAXParser();

			InputStream is = new FileInputStream(fileName);

			saxparser.parse(is, new MySAXHandler());

		} catch (ParserConfigurationException e) {

			e.printStackTrace();

		} catch (SAXException e) {

			e.printStackTrace();

		} catch (FileNotFoundException e) {

			e.printStackTrace();

		} catch (IOException e) {

			e.printStackTrace();

		}

	}

	

}

class MySAXHandler extends DefaultHandler {

	boolean hasAttribute = false;

	Attributes attributes = null;

	public void startDocument() throws SAXException {

		System.out.println("文档开始打印了");

	}

	public void endDocument() throws SAXException {

		System.out.println("文档打印结束了");

	}

	public void startElement(String uri, String localName, String qName,

	Attributes attributes) throws SAXException {

		if (qName.equals("employees")) {

			return;

		}

		if (qName.equals("employee")) {

			System.out.println(qName);

		}

		if (attributes.getLength() > 0) {

			this.attributes = attributes;

			this.hasAttribute = true;

		}

	}

	public void endElement(String uri, String localName, String qName)

	throws SAXException {

		if (hasAttribute && (attributes != null)) {

			for (int i = 0; i < attributes.getLength(); i++) {

				System.out.println(attributes.getQName(0)
						+ attributes.getValue(0));

			}

		}

	}

	public void characters(char[] ch, int start, int length)

	throws SAXException {

		System.out.println(new String(ch, start, length));

	}

}

3. jdom[需要引入jdom]
package org.jdom;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
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;
import org.jdom.output.XMLOutputter;
import org.w3c.dom.XmlDocument;

/**
 * 
 * @author hongliang.dinghl JDOM 生成与解析XML文档
 * 
 */
public class JDomDemo implements XmlDocument {

	public void createXml(String fileName) {
		Document document;
		Element root;
		root = new Element("employees");
		document = new Document(root);
		Element employee = new Element("employee");
		root.addContent(employee);
		Element name = new Element("name");
		name.setText("ddvip");
		employee.addContent(name);
		Element sex = new Element("sex");
		sex.setText("m");
		employee.addContent(sex);
		Element age = new Element("age");
		age.setText("23");
		employee.addContent(age);
		XMLOutputter XMLOut = new XMLOutputter();
		try {
			XMLOut.output(document, new FileOutputStream(fileName));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	public void parserXml(String fileName) {
		SAXBuilder builder = new SAXBuilder(false);
		try {
			Document document = builder.build(fileName);
			Element employees = document.getRootElement();
			List employeeList = employees.getChildren("employee");
			for (int i = 0; i < employeeList.size(); i++) {
				Element employee = (Element) employeeList.get(i);
				List employeeInfo = employee.getChildren();
				for (int j = 0; j < employeeInfo.size(); j++) {
					System.out.println(((Element) employeeInfo.get(j))
							.getName()
							+ ":"
							+ ((Element) employeeInfo.get(j)).getValue());
				}
			}
		} catch (JDOMException e) {

			e.printStackTrace();
		} catch (IOException e) {

			e.printStackTrace();
		}
	}

	@Override
	public void init() {
		// TODO Auto-generated method stub
		
	}
}


4. dom4j[需要引入dom4j]
package org.dom4j;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Iterator;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.w3c.dom.XmlDocument;

/**
 *  具有性能优异、功能强大和极端易用使用的特点
 *  开源
 * 
 * @author hongliang.dinghl Dom4j 生成XML文档与解析XML文档
 */
public class Dom4jDemo implements XmlDocument {

	@Override
	public void init() {
		// TODO Auto-generated method stub
		
	}
	
	public void createXml(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 void parserXml(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");
	}


}


5. xerces[需要引入xerces.jar]
*System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
 *System.setProperty("javax.xml.parsers.SAXParserFactory", "com.sun.org.apache.xerces.jaxp.SAXParserFactoryImpl");
分享到:
评论

相关推荐

    sax,dom4j架包

    4. `jaxen-1.1.1.jar`:Jaxen是一个独立于任何特定XML解析器的XPath实现,它可以与DOM、DOM4J、JDOM等多种XML处理库配合使用,提供XPath查询功能。 使用这些库,开发者可以在Java应用中方便地处理XML文档。例如,...

    dom4j & jdom 的jar包

    1. **灵活的API**:DOM4J支持多种XML处理模式,包括DOM、SAX和StAX,可以根据项目需求选择最适合的方法。 2. **易于使用**:其设计简洁,使得开发者能够快速上手,通过直观的API实现XML文档的读写。 3. **XPath支持*...

    dom4j-1.6.1.jar;jdom.jar;xercesImpl.jar

    在Java编程中,处理XML文件时通常会用到解析库,本话题将详细探讨DOM4J和JDOM这两款常用的XML解析库,以及它们所需的依赖包。 1. DOM4J解析库: DOM4J是Java中的一款非常灵活且功能强大的XML处理库,其名称来源于...

    dom4j-1.6.1.jar jdom.jar xercesImpl.jar 三种包下载

    在Java编程领域,XML(可扩展标记语言)是用于数据交换和存储的常见格式,而DOM4J、JDOM和XercesImpl是处理XML文档的三个重要库。这三个jar文件是Java XML处理的重要组成部分,下面将分别详细介绍它们的功能、用途...

    Xerces-J-src.1.4.0.zip

    除了SAX,Xerces-J还支持DOM解析器,该解析器将整个XML文档转化为一个树形结构,方便进行遍历和修改。DOM解析器适用于文档较小或者需要频繁查询的情况,但内存消耗较大。 Xerces-J的源代码包含了完整的解析引擎实现...

    xerces.jar&&crimson.jar

    DOM4J是一个Java库,它提供了对XML、XPath和XSLT的全面支持,同时也包含了DOM、SAX和JDOM的API。DOM4J的设计目标是简单易用,因此它非常适合处理小型到中型的XML文档。如果你在Java项目中使用DOM4J来解析XML,那么`...

    JDOM讲解(java)

    SAX与DOM和JDOM不同之处在于,它不会将整个XML文档加载到内存中,而是逐个处理文档中的事件,从而节省了内存资源。 #### 三、JDOM的基本使用流程 在使用JDOM之前,首先需要下载并配置JDOM库。可以从官方网址下载...

    Java中解析Xml所系jar包集合

    DOM4J是一个非常灵活的Java XML API,它提供了对DOM、SAX和JDOM的增强支持。DOM4J提供了丰富的API来处理XML,包括创建、修改和查询XML文档。它支持XPath表达式,使得能够方便地查找和操作XML元素。此外,DOM4J还...

    关于Jdom和Jdom的一些资料

    在JavaOne大会上,JDOM的介绍可能涉及了JDOM的最新版本特性、性能优化、与其他XML库(如DOM4J、Apache Xerces等)的比较,以及如何利用JDOM进行XML的序列化和反序列化。这部分内容通常会强调JDOM的易用性和灵活性,...

    jdom的源代码文档

    首先,我们要明白JDOM的核心理念是建立一个完全用Java实现的DOM(Document Object Model)接口,避免了使用其他跨平台的XML解析库如DOM4J或Xerces时可能遇到的平台依赖性问题。JDOM的设计目标是简单、高效和直接,...

    XML及jdom解析

    XPath是查询XML文档的路径语言,Jaxen允许在JDOM、DOM4J等不同模型上执行XPath表达式。 7. **XML-apis.jar**:这个库包含了XML规范的基本API,如DOM、SAX和XML Schema。 8. **SaxPath.jar**:SAXPath是SAX解析器和...

    解析XML文件的方法方式总结

    本文将深入探讨三种主流的Java XML解析方法:DOM4J、JDOM和SAX,帮助你理解它们的工作原理以及如何在实际开发中有效利用。 一、DOM4J解析 DOM4J是一个灵活的开源Java库,用于处理XML文档。它基于DOM(Document ...

    javaEE总结

    DOM4J是一个开源的Java XML API,它在灵活性和性能上优于JDOM,同时提供了一个接口和抽象类的模型。尽管API相对复杂,但它的功能强大且易于使用。DOM4J广泛应用于如Hibernate和Sun的JAXM等项目。使用DOM4J,开发者...

    jdom

    7. **JDOM与其他解析库比较**:除了JDOM,Java还有许多其他XML处理库,如DOM4J、Xerces和Woodstox。每个库有其特点和适用场景,开发者应根据项目需求选择合适的技术。 8. **apidocs**:这个压缩包内的“apidocs”...

    jdom教程+实例(含源代码)

    JDOM的出现是为了弥补Java标准库中DOM和SAX解析器的不足,它结合了两者的优势,既支持随机访问,也支持事件驱动模型,适合于各种XML处理场景。 **二、JDOM的优点** 1. **简单易用**:JDOM的API设计得非常直观,...

    jdom jar包附带源码下载

    JDOM与其他XML处理库(如DOM4J、Apache Xerces、Woodstox等)相比,具有更简洁的API和更好的性能。它的设计目标是让Java开发者能更自然地与XML数据交互,避免了过多的低级XML处理工作。 总的来说,JDOM是Java开发中...

    xerces-2.9.0.jar

    4. 检查是否有其他 XML 解析器(如 Woodstox 或 JDOM)与 Xerces 冲突,如果有,调整配置以避免冲突。 标签 "xerces" 提示我们讨论的主题与 Xerces 解析器有关,这是一个强大的工具,广泛应用于处理 XML 数据的 ...

    jdom资料

    1. **DOM4J**:也是一个流行的Java XML库,提供了与JDOM类似的API,同时支持DOM Level 3和XPath。 2. **Apache Xerces**:Apache提供的XML解析器,实现了完整的DOM和SAX解析,适用于需要高性能和低内存消耗的场景。 ...

    JDOM解析XML

    2. xerces.jar:提供了Xerces-J,一个实现了XML规范的解析器,包括DOM和SAX解析器。 3. ant.jar:Apache Ant的库,这是一个Java构建工具,常用于编译、测试和打包项目,但在这里可能是依赖于其他库的一部分。 4. ...

Global site tag (gtag.js) - Google Analytics