天天看点

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:刘诗雅

睡觉

刷剧

追星

打豆豆