解析XML(2/4)——SAX(1/2)
程序员文章站
2022-05-28 08:03:14
...
一、saxtest.java
package com.test.saxtest;
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
import com.cisau.handler.SAXParserHandler;
public class SAXTest {
public static void main(String[] args) {
//1、创建SAXParserFactory对象
SAXParserFactory saxpf = SAXParserFactory.newInstance();
try {
//2、通过SAXParserFactory创建SAXParser的实例
SAXParser parser = saxpf.newSAXParser();
//3、创建SAXParserHandler对象
SAXParserHandler saxParserHandler = new SAXParserHandler();
parser.parse("books.xml", saxParserHandler);
}catch (IOException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
}
}
二、SAXParserHandler.java
package com.cisau.handler;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SAXParserHandler extends DefaultHandler {
int bookIndex = 0;
//******************************************************************************************
/**
* 遍历XML文件的--开始--标签
* 解析XML元素
*/
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
//调用DefaultHandler的startElement方法
super.startElement(uri, localName, qName, attributes);
if (qName.equals("book")) {
bookIndex ++ ;
System.out.println("=============开始遍历" + bookIndex + "本书的内容============");
//已知book标签中只有一个ID属性,根据属性名获取属性值
/* String value = attributes.getValue("id");
System.out.println("book标签中的属性值是:" + value);*/
//不知道book标签中的属性名和个数
int length = attributes.getLength();
for (int i = 0; i < length; i++) {
System.out.print("book元素的第" + (i+1) + "个属性名是:" + attributes.getQName(i));
System.out.println("-----属性值是:" + attributes.getValue(i));
}
}
else if(!qName.equals("bookstore")){
System.out.print("节点名是:" + qName + "--------");
}
}
/**
* 遍历XML文件的--结束--标签
*/
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
//调用DefaultHandler的startElement方法
super.endElement(uri, localName, qName);
if (qName.equals("book")) {
System.out.println("=============结束遍历" + bookIndex + "本书的内容============");
}
}
//***************************************标识开始解析***************************************************
/**
* 标识XML解析--开始
*/
@Override
public void startDocument() throws SAXException {
super.startDocument();
System.out.println("解析:开始--");
}
/**
* 标识XML解析--结束
*/
@Override
public void endDocument() throws SAXException {
super.endDocument();
System.out.println("解析:--结束");
}
//****************************************开始获取节点信息**************************************************
/**
* 获取整个文档中的所有内容---解析节点名+节点间文本
*/
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
super.characters(ch, start, length);
String value = new String(ch, start, length);
if (!value.trim().equals("")) {
System.out.println("节点值是:" + value);
}
}
}
三、books.xml
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book id="1">
<name>冰与火之歌</name>
<author>乔治马丁</author>
<year>2014</year>
<price>88</price>
</book>
<book>
<id>2</id>
<name>安徒生童话</name>
<author>丹麦</author>
<year>2004</year>
<price>66</price>
</book>
<book id="3" name="ha ">
<id><a>即使他---*</a>3</id>
<name>java开发</name>
<author>美国</author>
<year>2000</year>
<price>99</price>
</book>
</bookstore>
上一篇: SAX解析
推荐阅读
-
S1 S2 S3 S4 S5
-
JavaEE基础day02 1.定义Java中的变量 四类八种 2.变量定义和使用的注意事项 3.数据类型的转换、强制数据类型转换4.算数运算符、比较运算符、逻辑运算符、赋值运算符、三元运算符
-
php xml分析函数代码第1/2页
-
struts2 validation.xml 验证规则代码解析
-
struts2 validation.xml 验证规则代码解析
-
实例演练ASP+XML编程比较全的了第1/2页
-
个人FTP建站域名解析serv-u常见问题解决方法之完全解决方案第1/2页
-
pow函数(数学次方)在c语言的用法,两种编写方法实例( 计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值)
-
iPad mini 4和其他Ipad mini/mini1/2/3的区别对比
-
学习9.总结# 1.函数初识 # 2.函数的定义 # 3.函数的调用 # 4.函数的返回值 # 5.函数的参数