天天看點

java xml檔案解析工具_Xml檔案解析工具 - java

解析Xml檔案:就是把Xml檔案裡面的内容取出來。

Xml檔案解析工具:一個能解析Xml檔案的類,即一個能把Xml檔案裡面的内容取出來的類。

先給出一個Xml檔案(student_infor.xml):

足球

籃球

混球

二球

張三之子,體格壯碩,膽小如鼠,外号加菲貓!

睡覺

刷劇

追星

打豆豆

劉家之女,酷愛唱歌! 但五音有其四,鄰居不堪其擾,謂之劉嘶啞!

先簡單解析一下上面的Xml檔案,代碼如下:

packagecom.zss.about_xml_parser.test;importjava.io.IOException;importjava.io.InputStream;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importjavax.xml.parsers.ParserConfigurationException;importorg.w3c.dom.Document;importorg.w3c.dom.Element;importorg.w3c.dom.NodeList;importorg.xml.sax.SAXException;public classTest {public static voidmain(String[] args) {try{

DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();

DocumentBuilder db=dbf.newDocumentBuilder();

InputStream is= Test.class.getResourceAsStream("/student_infor.xml");

Document document=db.parse(is); //這幾行代碼就像巫師的咒語,雖然讀不懂,但是效果巨大(産生document)

NodeList studentList= document.getElementsByTagName("student");for(int i = 0; i < studentList.getLength(); i++) {

Element student=(Element) studentList.item(i);

String id= student.getAttribute("id");

String name= student.getAttribute("name");

String sex= student.getAttribute("sex");

String birth= student.getAttribute("birth");

System.out.println("id:" +id);

System.out.println("name:" +name);

System.out.println("sex:" +sex);

System.out.println("birth:[" + birth + "]");

NodeList hobbies= student.getElementsByTagName("hobby");for(int j = 0; j < hobbies.getLength(); j++) {

Element hobby=(Element) hobbies.item(j);

String hobbyName=hobby.getTextContent();

System.out.println("\t" +hobbyName);

}

Element introduce=(Element) student.getElementsByTagName("introduce").item(0);

System.out.println("簡介\n\t" +introduce.getTextContent().trim());

}

}catch(ParserConfigurationException e) {

e.printStackTrace();

}catch(SAXException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}

}

}

結果如下:

id:201810001

name:張三小

sex:男

birth:[2000-10-10]

足球

籃球

混球

二球

簡介

張三之子,體格壯碩,膽小如鼠,外号加菲貓!

id:201811001

name:劉詩雅

sex:女

birth:[2010-10-21]

睡覺

刷劇

追星

打豆豆

簡介

劉家之女,酷愛唱歌! 但五音有其四,鄰居不堪其擾,謂之劉嘶啞!

當然,我們不可能在每次解析Xml檔案時,都把上面這段代碼敲一遍。我們完全可以寫一個Xml檔案的解析工具,然後把它打成jar包,以後用的時候導包就行。

注意:上邊所有的輸出不應是我們工具該有的,工具隻負責取出資料,并提供一個操作資料的抽象方法。

工具代碼(XMLParser類):

packagecom.zss.util;importjava.io.IOException;importjava.io.InputStream;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importjavax.xml.parsers.ParserConfigurationException;importorg.w3c.dom.Document;importorg.w3c.dom.Element;importorg.w3c.dom.NodeList;importorg.xml.sax.SAXException;public abstract classXMLParser {private static finalDocumentBuilderFactory dbf;static { //靜态塊 隻在該類第一次被引用時執行,以後再不執行

dbf = DocumentBuilderFactory.newInstance(); //這種方式往往保證dbf是單立的

}publicXMLParser() {

}public abstract void dealElement(Element element, intindex);public voiddealElementInTag(Element element, String tagName) { //此方法用來處理更深入一層的标簽

NodeList elements=element.getElementsByTagName(tagName);for(int index = 0; index < elements.getLength(); index++) {

Element ele=(Element) elements.item(index);//對于element的處理應該由XMLParser的使用者來決定的!

dealElement(ele, index);

}

}public voiddealElementInTag(Document document, String tagName) { //此方法用來處理最外層标簽

NodeList elements=document.getElementsByTagName(tagName);for(int index = 0; index < elements.getLength(); index++) {

Element element=(Element) elements.item(index);//對于element的處理應該由XMLParser的使用者來決定的!

dealElement(element, index);

}

}public staticDocument getDocument(String xmlPath) {

Document document= null;try{

DocumentBuilder db=dbf.newDocumentBuilder();

InputStream is= XMLParser.class.getResourceAsStream(xmlPath); //此方法用來得到document

document=db.parse(is);

}catch(ParserConfigurationException e) {

e.printStackTrace();

}catch(SAXException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}returndocument;

}

}

有了這個工具,該怎麼用這個工具去解析Xml檔案呢,繼續往下看:

packagecom.zss.about_xml_parser.test;importorg.w3c.dom.Element;importcom.zss.util.XMLParser;public classTest {public static voidmain(String[] args) {newXMLParser() { // 匿名内部類嵌套

@Overridepublic void dealElement(Element element, intindex) {

String name= element.getAttribute("name");

String sex= element.getAttribute("sex");

System.out.println("name:" +name);

System.out.println(sex);newXMLParser() {

@Overridepublic void dealElement(Element element, intindex) {

String hobby=element.getTextContent();

System.out.println("\t" +hobby);

}

}.dealElementInTag(element,"hobby"); //這部分代碼請仔細分析!!!

}

}.dealElementInTag(

XMLParser.getDocument("/student_infor.xml"), "student");

}

}

結果如下:

name:張三小

足球

籃球

混球

二球

name:劉詩雅

睡覺

刷劇

追星

打豆豆