需求:读取contact.xm文件,完整的输出文档内容。
Demo:
package com.sax;
import java.io.File;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
/**
* Author:Liu Zhiyong(QQ:1012421396)
* Version:Version_1
* Date:2016年11月10日20:31:26
* Desc:读取contact.xm文件,完整的输出文档内容。
*/
public class ReadXML {
public static void main(String[] args) throws Exception {
//创建SAXParser对象
SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
//选择要读取的文档
File file = new File("./src/contact.xml");
MyReadXMLHandler handler = new MyReadXMLHandler();
//解析xml
saxParser.parse(file, handler);
//打印文档内容
System.out.println(handler.getXmlContent());
}
}
MyReadXMLHandler .java :
package com.sax;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class MyReadXMLHandler extends DefaultHandler {
//存储xml文档信息
private StringBuffer sb = new StringBuffer();
public String getXmlContent(){
return sb.toString();
}
/**
* 开始标签时调用
*/
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
sb.append("<" + qName);
//拿到标签内的属性
for(int i=0; i<attributes.getLength(); i++){
//得到属性名
String attName = attributes.getQName(i);
//得到属性值
String attValue = attributes.getValue(i);
sb.append(" " + attName + "=\"" + attValue + "\"");
}
sb.append(">");
}
/**
* 读到文本内容时调用
*/
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
//获取当前读到的文本
String content = new String(ch, start, length);
sb.append(content);
}
/**
* 结束标签时调用
*/
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
//结束标签
sb.append("<" + qName + "/>");
}
}
Contact.java:
package com.sax;
public class Contact {
private String id;
private String name;
private String age;
private String phone;
private String email;
private String qq;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getQq() {
return qq;
}
public void setQq(String qq) {
this.qq = qq;
}
@Override
public String toString() {
return "Contact [id=" + id + ", name=" + name + ", age=" + age
+ ", phone=" + phone + ", email=" + email + ", qq=" + qq + "]";
}
}
contact.xml:
<?xml version="1.0" encoding="utf-8"?>
<contactList>
<contact id="001" att1="属性值1">
<name>木丁西<nameNode>小刘</nameNode></name>
<age>18</age>
<phone>18071897425</phone>
<email>1012421396@qq.com</email>
<qq>1012421396</qq>
</contact>
<木丁西>
这是个什么鬼。
</木丁西>
<contact id="002">
<name>刘先森</name>
<age>20</age>
<phone>18771897466</phone>
<email>561242139@qq.com</email>
<qq>561242139</qq>
</contact>
<abc>
</abc>
</contactList>
效果: