- 浏览: 28673 次
- 性别:
- 来自: 广州
最新评论
-
Java小菜哈:
大哥,你有没有试过的,解析DOM数的时候还是个死循环。
java解析xml之一:使用SAX与DOM -
Sequencenet:
可以使用,开源精神发扬光大。
java获取网页主信息之五:测试 -
lahvey:
可以写一个浏览器了,利害
java获取网页主信息之一:html树操作 -
xo_tobacoo:
很想看看,可是干扰的字符太多,请清理下哦!
位操作技巧 -
sku:
好东东,谢谢博主无私奉献,真的太厉害。我一定要好好研究一下。
...
java获取网页主信息之五:测试
一.概要
用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object Module)称为DOM。Sun公司提供了Java API for XML Parsing(JAXP)接口来使用SAX和DOM,通过JAXP,我们可以使用任何与JAXP兼容的XML解析器。
JAXP接口包含了三个包:
(1)org.w3c.dom W3C推荐的用于XML标准规划文档对象模型的接口。
(2)org.xml.sax 用于对XML进行语法分析的事件驱动的XML简单API(SAX)
(3)javax.xml.parsers解析器工厂工具,程序员获得并配置特殊的特殊语法分析器。
二.实例
1.所需xml文件
Test.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <books>
- <book email="zeh2007@126.com">
- <name>C++编程思想</name>
- <price>60.0</price>
- </book>
- </books>
students.xml
- <?xml version="1.0" encoding="gb2312"?>
- <?xml-stylesheet type="text/xsl" href="students.xsl"?>
- <students>
- <student sn="04378066">
- <name>ldz</name>
- <age>23</age>
- </student>
- <student sn="04378069">
- <name>zeh</name>
- <age>21</age>
- </student>
- </students>
2.将xml文件转化为dom:
- package domParser;
- import java.io.File;
- import java.io.IOException;
- import javax.xml.parsers.DocumentBuilder;
- import javax.xml.parsers.DocumentBuilderFactory;
- import javax.xml.parsers.ParserConfigurationException;
- 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;
- //下面主要是org.xml.sax包的类
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- import org.w3c.dom.Node;
- import org.w3c.dom.NodeList;
- import org.w3c.dom.Text;
- import org.xml.sax.SAXException;
- public class DOMConvert {
- public static void main(String[] args) {
- //DOM解析器的工厂实例
- DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
- try {
- //从DOM工厂获得DOM解析器
- DocumentBuilder db=dbf.newDocumentBuilder();
- //解析XML文档的输入流,得到一个Document
- Document doc=db.parse(new File("xmlFil/students.xml"));
- //建立一个XML节点
- Element eltStu=doc.createElement("student");
- Element eltName=doc.createElement("name");
- Element eltAge=doc.createElement("age");
- Text textName=doc.createTextNode("yyr");
- Text textAge=doc.createTextNode("22");
- eltName.appendChild(textName);
- eltAge.appendChild(textAge);
- eltStu.appendChild(eltName);
- eltStu.appendChild(eltAge);
- eltStu.setAttribute("sn","04378072");
- //将此节点插入根的孩子中
- Element root=doc.getDocumentElement();
- root.appendChild(eltStu);
- //获取stuent标签节点
- NodeList nl=root.getElementsByTagName("student");
- //删除第一个节点
- root.removeChild(nl.item(0));
- //获取第一个节点
- Element eltStuChg=(Element)nl.item(0);
- //获取age标签节点
- Node nodeAgeChg=eltStuChg.getElementsByTagName("age").item(0);
- nodeAgeChg.getFirstChild().setNodeValue("20");
- int len=nl.getLength();
- for(int i=0;i
- Element elt=(Element)nl.item(i);
- System.out.println("编号:" + elt.getAttribute("sn"));
- Node nodeName=elt.getElementsByTagName("name").item(0);
- Node nodeAge=elt.getElementsByTagName("age").item(0);
- String name=nodeName.getFirstChild().getNodeValue();
- String age=nodeAge.getFirstChild().getNodeValue();
- System.out.println("姓名:"+name);
- System.out.println("年龄:" + age);
- System.out.println("--------------------");
- }
- //实例化一个转换工厂
- TransformerFactory tff=TransformerFactory.newInstance();
- //获取一个转换实例
- Transformer tf=tff.newTransformer();
- //设置输出属性
- tf.setOutputProperty("encoding","gb2312");
- //根据Document对象新建一个DOM数据源
- DOMSource source=new DOMSource(doc);
- //定义输出流
- StreamResult result=new StreamResult(new File("convert.xml"));
- //从数据源转换至输出流
- tf.transform(source,result);
- }
- catch (ParserConfigurationException e) {
- e.printStackTrace();
- }
- catch (SAXException e) {
- e.printStackTrace();
- }
- catch (IOException e) {
- e.printStackTrace();
- }
- catch (TransformerConfigurationException e) {
- e.printStackTrace();
- }
- catch (TransformerException e) {
- e.printStackTrace();
- }
- }
- }
3.解析DOM树
- package domParser;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.InputStream;
- import javax.xml.parsers.DocumentBuilder;
- import javax.xml.parsers.DocumentBuilderFactory;
- import javax.xml.parsers.ParserConfigurationException;
- //下面主要是org.xml.sax包的类
- 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;
- public class DomParser {
- public DomParser() {
- //DOM解析器的工厂实例
- DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance();
- try {
- //从DOM工厂获得DOM解析器
- DocumentBuilder dombuilder=domfac.newDocumentBuilder();
- //把要解析的XML文档转化为输入流
- InputStream is=new FileInputStream("Test.xml");
- //解析XML文档的输入流,得到一个Document
- Document doc=dombuilder.parse(is);
- //得到XML文档的根节点
- Element root=doc.getDocumentElement();
- //得到节点的子节点
- NodeList books=root.getChildNodes();
- if(books!=null) {
- for(int i=0;i
- Node book=books.item(i);
- if(book.getNodeType()==Node.ELEMENT_NODE) {
- //取得节点的属性值
- String email=book.getAttributes().getNamedItem("email").getNodeValue();
- System.out.println(email);
- //轮循子节点
- for(Node node=book.getFirstChild();node!=null;node=node.getNextSibling()) {
- if(node.getNodeType()==Node.ELEMENT_NODE) {
- if(node.getNodeName().equals("name")) {
- String name=node.getNodeValue();
- node.setNodeValue("Java编程思想");
- String name1=node.getFirstChild().getNodeValue();
- System.out.println(name);
- System.out.println(name1);
- }
- if(node.getNodeName().equals("price")) {
- String price=node.getFirstChild().getNodeValue();
- System.out.println(price);
- }
- }
- }
- }
- }
- }
- }
- catch (ParserConfigurationException e) {
- e.printStackTrace();
- }
- catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- catch (SAXException e) {
- e.printStackTrace();
- }
- catch (IOException e) {
- e.printStackTrace();
- }
- }
- public static void main(String[] args)
- {
- new DomParser();
- }
- }
4.打印DOM树
- package domParser;
- import java.io.File;
- import java.io.IOException;
- import javax.xml.parsers.DocumentBuilder;
- import javax.xml.parsers.DocumentBuilderFactory;
- import javax.xml.parsers.ParserConfigurationException;
- //下面主要是org.xml.sax包的类
- import org.w3c.dom.*;
- import org.xml.sax.SAXException;
- public class DOMPrinter{
- //打印指定节点(节点名:节点值)
- public static void printNodeInfo(Node node){
- System.out.println(node.getNodeName()+" : "+node.getNodeValue());
- }
- //递归打印全部节点
- public static void printNode(Node node){
- short nodeType=node.getNodeType();
- //判断节点类型
- switch(nodeType){
- //前缀节点
- case Node.PROCESSING_INSTRUCTION_NODE:
- System.out.println("-----------PI start-----------");
- printNodeInfo(node);
- System.out.println("-----------PI end-----------");
- break;
- //元素节点
- case Node.ELEMENT_NODE:
- System.out.println("-----------Element start-----------");
- printNodeInfo(node);
- System.out.println("-----------Element end-----------");
- //打印节点属性值
- NamedNodeMap attrs=node.getAttributes();
- int attrNum=attrs.getLength();
- for(int i=0;i
- Node attr=attrs.item(i);
- System.out.println("-----------Attribute start-----------");
- printNodeInfo(attr);
- System.out.println("-----------Attribute end-----------");
- }
- break;
- //文本节点
- case Node.TEXT_NODE:
- System.out.println("-----------Text start-----------");
- printNodeInfo(node);
- System.out.println("-----------Text end-----------");
- break;
- default:
- break;
- }
- //递归打印节点信息
- Node child=node.getFirstChild();
- while(child!=null){
- printNode(child);
- child=child.getNextSibling();
- }
- }
- public static void main(String[] args){
- //DOM解析器的工厂实例
- DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
- try{
- //从DOM工厂获得DOM解析器
- DocumentBuilder db=dbf.newDocumentBuilder();
- //解析XML文档的输入流,得到一个Document
- Document doc=db.parse(new File("students.xml"));
- //打印节点
- printNode(doc);
- }
- catch (ParserConfigurationException e){
- e.printStackTrace();
- }
- catch (SAXException e){
- e.printStackTrace();
- }
- catch (IOException e){
- e.printStackTrace();
- }
- }
- }
发表评论
-
java获取网页主信息之五:测试
2007-09-01 22:29 24321.所需文件 param.txt:存放需要提取信息的网页路径 ... -
java获取网页主信息之四:抽取信息块
2007-09-01 22:24 2277从已经建立完成的html树中抽取主信息。 pac ... -
java获取网页主信息之三:html to tree
2007-09-01 22:22 2505对html文件进行扫描,将html元素抽象出来形成树。 ... -
java获取网页主信息之二:辅助操作
2007-09-01 22:19 17511.栈操作 package Source; ... -
java获取网页主信息之一:html树操作
2007-09-01 22:17 29931.节点操作 package ... -
java解析xml之三:使用domj4
2007-09-01 22:06 4278一.简介 DOM4J是dom4j.org出品的一个开源 ... -
java解析xml之二:使用JDOM
2007-09-01 21:49 1621一.简介 JDOM是一种解析XML的Java工具包。 ...
相关推荐
Java提供了多种解析XML的API,包括SAX(Simple API for XML)、DOM(Document Object Model)以及DOM4J。下面我们将详细探讨这些解析方式及其在实际开发中的应用。 1. SAX解析器: SAX是一种基于事件驱动的解析器,...
Java 解析 XML 文件的 DOM 和 SAX 方式是指在 Java 中使用 Document Object Model(DOM)和 Simple API for XML(SAX)两种方式来解析 XML 文件的技术。下面将详细介绍这两种方式的原理、实现和优缺点。 DOM 方式 ...
Java作为一种强大的编程语言,提供了多种处理XML的API,如DOM、SAX和StAX等。本篇文章将重点讲解XML在Java中的解析方式,特别是DOM和SAX解析。 1. DOM解析: DOM(Document Object Model)是W3C推荐的一种处理XML...
Java解析XML数据主要涉及到的是对XML文档的读取和处理,SAX(Simple API for XML)解析器是一种基于事件驱动的解析方式,适用于处理大型XML文件。与DOM(Document Object Model)解析器不同,SAX不需要一次性加载...
一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml文件的实例
本压缩包文件“XML-java.rar”包含了关于使用Java解析XML的实例,特别强调了SAX解析器的使用,并且提到了使用JDOM和JOM4J这两个Java库来处理XML。 1. **DOM解析**:DOM是一种树型结构,它将整个XML文档加载到内存中...
在Java中,解析XML有多种方法,主要包括DOM、SAX和DOM4J。下面将详细介绍这三种解析方式及其对应的jar包。 1. DOM (Document Object Model) DOM是一种基于树形结构的XML解析方法,它将整个XML文档加载到内存中,...
下面将详细介绍这四种解析XML的方法。 1. SAX(Simple API for XML) SAX是一种事件驱动的解析器,它不会一次性加载整个XML文档到内存中,而是逐行读取,当遇到文档中的元素、属性等时,会触发相应的事件处理器方法...
DOM4J 是一个基于 Java 的 XML 解析器,提供了与 DOM 相似的 API,但是性能更好。DOM4J 解析器的优点是: * 性能更好,占用内存较少 * 提供了与 DOM 相似的 API,易于使用 然而,DOM4J 解析器也存在一些缺点: * ...
在提供的“analysis_xml”项目中,很可能包含了一个示例,演示了如何使用dom4j的SAX解析器解析XML文件。这样的测试项目有助于理解SAX解析的工作原理,并在实际开发中应用。 总结起来,dom4j库提供了DOM和SAX两种XML...
本文将深入探讨几种不同的XML解析方法,并通过实际的“Java解析XML性能对比分析Demo”来展示它们的性能差异。我们将讨论DOM、SAX、JDOM、DOM4J和JAXB这五种解析器,以及它们各自的特点和适用场景。 1. DOM(文档...
例如,使用`DocumentBuilderFactory`创建`DocumentBuilder`,然后用`parse()`方法解析XML文件,最后通过`getElementsByTagName()`等方法访问节点。 2. SAX(Simple API for XML) 与DOM不同,SAX是基于事件驱动的...
以下是一个使用Java DOM解析XML的步骤: 1. 引入必要的库: 需要引入`javax.xml.parsers`包,包含DOM解析器的主要类。 2. 创建解析器工厂: 使用`DocumentBuilderFactory`创建一个解析器工厂实例,然后通过`...
总结,SAX解析XML是一种高效且节省内存的处理方式,适用于处理大量XML数据。通过实现回调接口,我们可以根据XML文档的结构执行相应的操作,而无需一次性加载整个文件。了解并熟练掌握SAX解析技术,有助于我们在处理...
它在解析XML文件时,会按顺序触发一系列事件,如开始元素、结束元素等,用户需要自定义事件处理器来响应这些事件。SAX的优点在于它不需要一次性将整个XML文件加载到内存,内存消耗相对较小,适合处理大型XML文档。但...
本主题主要探讨两种解析XML的方法:DOM(Document Object Model)解析和SAX(Simple API for XML)解析。 首先,DOM解析是一种将整个XML文档加载到内存中的解析方式,它构建了一个树形结构,允许开发者通过节点层级...
JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML
本文将深入讲解如何使用SAX(Simple API for XML)解析XML文档,并将解析结果导出到Excel文件中。SAX是一种事件驱动的解析方式,相比DOM(Document Object Model)解析,它更节省内存,适用于处理大型XML文件。 ...