解析XML文件的Jar包在文章最末尾
#1.怎么书写一个XML文件
提前说明:我们使用的是eclipse
在你想声明XML文件的包目录下右键,选择new,再点击other
点击完成后,我们会看到这样的界面
选中XML文件,最后我们会得到这样的效果
这样我们就得到一个XML文件了
接下来我们书写一个XML文件,书写格式十分简单,大家模仿下面的书写方式即可。
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student id = "06113045" name = "臭弟弟" sex = "男">
<hobby>唱歌</hobby>
<hobby>跳舞</hobby>
<hobby>Rap</hobby>
</student>
<student id = "06123077" name = "威猛先生" sex = "男">
<hobby>LoL</hobby>
<hobby>学习</hobby>
<hobby>斗地主</hobby>
</student>
</students>
尖括号里面的叫做标签,这只是一个名字写什么都可以
下面就是XML文件的两种写法
第一种一种就是第一行把内容写在尖括号里 名字 = 内容在写下一对时一定要用空格隔开。
第二种则是写在标签外
<student id = "06123077" name = "威猛先生" sex = "男">
<hobby>学习</hobby>
#2.怎么解析一个XML文件
首先我要说明我的XML文件的所在路径
解析过程
提前声明:下面很多代码初学者看起来会很难受,难以接受,不能理解,这很正常,大家都一样,我们要明白编程最重要的是逻辑思路,解析XML文件只是我们实现一个大程序所需要的一种手段,所以作为初学者,我们先把它当作神仙的咒语,先接受它。
package com.mec.Xml.core;
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 class XmlParse {
public static void main(String[] args) {
//下面括号里面写的东西就是XML文件的路径
InputStream is = XmlParse.class.getResourceAsStream("/lib/NewFile.xml");
try {
//下面两行,巫师的咒语我们先接受它
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = db.parse(is);
NodeList studentList = doc.getElementsByTagName("student");
for (int i = 0 ; i < studentList.getLength() ; i++) {
Element elements = (Element)studentList.item(i);
String id = elements.getAttribute("id");
String name = elements.getAttribute("name");
String sex = elements.getAttribute("sex");
//输出一下
System.out.println(id + name + sex);
NodeList hobbyList = elements.getElementsByTagName("hobby");
for (int j = 0 ; j < hobbyList.getLength() ; j++) {
Element elem = (Element)hobbyList.item(j);
String hobby = elem.getTextContent();
//S输出一下
System.out.println(hobby);
}
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行结果:
#3.将XML文件工具化
首先我们要明白为什么要将解析XML文件的代码工具化
原因如下:
大家也看到了上述代码,一个解析XML文件的代码要写那么长,而且还有很多不能理解的语法,如果我们把它做成工具,这样以后我们需要解析XML文件时只需要使用我们的工具即可,大大提高了我们的编程效率,一劳永逸。
XML文件解析工具的源码
package com.mec.Xml.core;
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 {
try {
db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
}
public XMLParser() {
}
public static Document load(String path) {
InputStream is = XMLParser.class.getResourceAsStream(path);
return load(is);
}
public static Document load(InputStream is) {
Document doc;
try {
doc = db.parse(is);
return doc;
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public abstract void dealMessage(Element element);
public void parser(Document doc, String tagname) {
NodeList list = doc.getElementsByTagName(tagname);
for (int i = 0 ; i < list.getLength() ; i++) {
Element element = (Element)list.item(i);
dealMessage(element);
}
}
public void parser(Element element, String tagname) {
NodeList list = element.getElementsByTagName(tagname);
for (int i = 0 ; i < list.getLength() ; i++) {
Element elem = (Element) list.item(i);
dealMessage(elem);
}
}
}
使用我们的工具去解析我们之前写的XML文件
package com.mec.Text;
import org.w3c.dom.Element;
import com.mec.Xml.core.XMLParser;
import com.mec.Xml.core.XmlParse;
public class XMLParseText {
public static void main(String[] args) {
new XMLParser() {
@Override
public void dealMessage(Element element) {
String id = element.getAttribute("id");
String name = element.getAttribute("name");
String sex = element.getAttribute("sex");
System.out.println(id + name + sex);
new XMLParser() {
@Override
public void dealMessage(Element element) {
String hobby = element.getTextContent();
System.out.println(hobby);
}
}.parser(element, "hobby");
}
}.parser(XMLParser.load("/lib/NewFile.xml"), "student");
}
}
运行结果:
最后为了大家使用方便我们给Jar包
https://pan.baidu.com/s/1DjxpNY00KA1Ag2PjFiJQLA
提取码:vo6w