xml解析方式有dom,sax,以及pull。相较而言,sax与pull极为相似,dom则大不一样。
**sax与pull最大的区别在于(假如有一个类似指针的东西) pull可以人为的去控制这个指针指向哪个标签,那个文本。而sax不同。强制从开头指到结尾。**pull的这种方式由于 PullParse.next()来实现。同时指向不同类型的标签或者Text文本,返回的eventtype也不同。
一下代码通过解析Xml 还原xml文件的样式。
Xml文件:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<书架>
<书>
<书名>Java就业培训教程</书名>
<作者>张孝祥</作者>
<售价>39.00元</售价>
</书>
<书>
<书名>JavaScript网页开发</书名>
<作者>张孝祥</作者>
<售价>199.00元</售价>
</书>
</书架>
效果图:
书架
书
书名Java就业培训教程书名
作者张孝祥作者
售价39.00元售价
书
书
书名JavaScript网页开发书名
作者张孝祥作者
售价199.00元售价
书
书架
public class PullParserText {
@Test
public void pullText() throws Exception {
// 获取解析器工厂
XmlPullParserFactory pullParserFactory = XmlPullParserFactory.newInstance();
// 获取解析器
XmlPullParser pullParser = pullParserFactory.newPullParser();
// 给解析器设置一个输入源
// 第一个参数是文件IO流 第二个参数是编码集
pullParser.setInput(new FileInputStream(new File("book.xml")), "utf-8");
// 获取当前的事件类型
// 文档的起始与末尾无法打印
// XmlPullParser.START_DOCUMENT 读取文档首 0
// XmlPullParser.END_DOCUMENT 读取文档尾 1
// 文档内容使用 getText();
// XmlPullParser.TEXT 读取文本内容 4
// 标签使用getName();
// XmlPullParser.START_TAG 读取首标签 2
// XmlPullParser.END_TAG 读取尾标签 3
int eventType = pullParser.getEventType();
while(eventType!=XmlPullParser.END_DOCUMENT) {
if (eventType == 4)
System.out.print(pullParser.getText());
else if(eventType == 2 || eventType == 3 )
System.out.println(pullParser.getName());
eventType = pullParser.next();
}
}
}