工具化原因: 大家都知道在使用XML解析时有一些固定的语句,要得到XML文件里的内容必须要输入这些固定的套路,用起来不是很舒服,今天做了一个XML解析的工具,可以用三四行代码实现解析XML,以便于日后使用起来非常方便。解析XML文件的固定套路:
try {
DocumentBuilderFactory dbf =
DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
InputStream is =
Class.class.getResourceAsStream("/NewFile.xml");
System.out.println(is);
Document document = db.parse(is);
NodeList studentlist =
document.getElementsByTagName("student");
for(int i = 0; i < studentlist.getLength(); i++){
Element student = (Element) studentlist.item(i);
//TODO 处理得到的Element
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
XML 解析工具化: 代码如下
package com.until.XML;
import java.io.IOException;
import java.io.InputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public abstract class XMLparser {
private static DocumentBuilder db;
//这里使用static的原因是如
//DocumentBuilderFactory.newInstance().newDocumentBuilder();的语句
//只需要在类加载的时候运行一遍即可,所以用static但该语句有异常处理所以下面采用
//static静态块初始化。
static {
try {
db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
}
public XMLparser() {
}
public abstract void dealAction(Element element, int index);
//这里定义一个接口,让用户处理得到的element,当有多个element时会有对于的下边index来区分。
//首先先做一个得到document的方法返回值类型为Document。采用static原因是用户可以通过类
//直接使用,方便操作。
public static Document getDocumentFile(String file) {
Document document = null;
try {
InputStream is = Class.class.getResourceAsStream(file);
document = db.parse(is);
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return document;
}
//给用户三种可以选择的方法,便于用户操作
//第一种用户提供Document类型对象和标签名字。
public void dealDocument(Document document, String Tagname){
NodeList nodelist = document.getElementsByTagName(Tagname);
for(int index = 0; index < nodelist.getLength(); index++) {
Element element = (Element)nodelist.item(index);
dealAction(element, index);
}
}
//第二种用户提供Element类型对象和标签名字。
public void dealDocument(Element element, String Tagname){
NodeList nodelist = element.getElementsByTagName(Tagname);
for(int index = 0; index < nodelist.getLength(); index++) {
Element ele = (Element)nodelist.item(index);
dealAction(ele, index);
}
}
//第三种用户提供文件路径(字符串)和标签名字。
public void dealDocument(String file, String Tagname){
Document document = getDocumentFile(file);
NodeList nodelist = document.getElementsByTagName(Tagname);
for(int index = 0; index < nodelist.getLength(); index++) {
Element element = (Element)nodelist.item(index);
dealAction(element, index);
}
}
}
使用所写工具解析XML文件:
package com.until.test;
import org.w3c.dom.Element;
import com.until.XML.XMLparser;
public class test {
public static void main(String[] args) {
//实例化一个对象直接采用该实例的方法。
//第一种使用方法:
new XMLparser() {
@Override
public void dealAction(Element element, int index) {
System.out.println(element.getTextContent());
//第二种使用方法,在第一种基础上
new XMLparser(){
@Override
public void dealAction(Element element, int index) {
System.out.println(element.getTextContent());
}
}.dealDocument(element, "id");
}
}.dealDocument("/NewFile.xml", "student");//直接使用该实例的方法
//第三种使用方法:
new XMLparser() {
@Override
public void dealAction(Element element, int index) {
System.out.println(element.getTextContent());
}
}.dealDocument(XMLparser.getDocumentFile("/NewFile.xml"), "student");
//直接使用该实例的方法XMLparser.getDocumentFile("/NewFile.xml")返回值为Document
//getDocumentFile是static的所以可以使用类点出来。
}
}
所用的XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student>
<id>06172099</id>
<name>杨涛</name>
<sex>男</sex>
<birthday>19970911</birthday>
<hobbies>
<hobby>编程</hobby>
<hobby>打游戏</hobby>
<hobby>睡觉</hobby>
</hobbies>
<intoduce>和女朋友逛街很好玩</intoduce>
</student>
</students>
解析结果
以上就是说做的解析XML的工具,欢迎大家使用。
转载请说明出处!