XML文件
什么是XML文件?
xml是可扩展标识语言,( Extensible Markup Language)就是开发者在符合xml命名规则的基础之上,可以根据自己的需求定义自己的标签;
xml文件的作用:
主要是用来存储数据
解析xml文件的方法
DOM、DOM4、SAX
Dom4J解析
Dom4J常用的对象
- SAXReader:读取XML文件到Document树结构文件对象
- Document:是一个 XML 文档对象树,类比 HTML 文档对象
- Element:元素节点。通过Document 对象可以查找单个元素
Dom4J解析步骤
- 创建解析器
- Document对象:通过解析器read方法获取
- 获取xml根节点
- 遍历子节点
public static void main(String[] args) {
try {
// 1、创建解析器
SAXReader reader = new SAXReader();
// 2、通过解析器的read方法将配置文件读取到内存中,生成一个Document(org.dom4j)对象数
Document document = reader.read("conf/students.xml");
// 3、获取根节点
Element rootElement = document.getRootElement();
// 4、开始遍历根节点
// 4.1、遍历得到每一个根节点
for (Iterator<Element> rootIter = rootElement.elementIterator(); rootIter.hasNext(); ) {
Element studentElt = rootIter.next();
// 4.2、根节点遍历得到每一个子节点
for (Iterator<Element> innerIter = studentElt.elementIterator();innerIter.hasNext(); ){
// 4.3、打印子节点信息
Element innerElt = innerIter.next();
String innerValue = innerElt.getStringValue();
String innerEltName = innerElt.getName();
System.out.println(innerEltName+":"+innerValue);
}
System.out.println("-------------------------");
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
SAX解析
事件驱动性,边读边写
因为无需将整个文档加载到内存中,因此适合解析大文件
public static void main(String[] args) {
try {
// 1、创建解析工厂
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
// 2、创建解析器
SAXParser saxParser = saxParserFactory.newSAXParser();
// 3、通过解析器的 Parser 方法
saxParser.parse("conf/persons.xml",new MyDefaultHandler());
} catch (ParserConfigurationException | SAXException | IOException e) {
e.printStackTrace();
}
}
public class MyDefaultHandler extends DefaultHandler {
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// super.startElement(uri, localName, qName, attributes);
System.out.print("<"+qName+">");
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
// super.characters(ch, start, length);
System.out.print(new String(ch,start,length));
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
// super.endElement(uri, localName, qName);
System.out.print("</"+qName+">");
}
XPath语法介绍
https://www.w3school.com.cn/xpath/index.asp
try {
// 1. Create 解析器
SAXReader reader = new SAXReader();
// 2. 通过解析其的read方法将配置文件读取到内存中,生成一个Document对象树
Document document = reader.read("conf/sys-conf.xml");
// 3、获取根节点遍历......
// 3*、 driver-name节点元素的路径:config -> database-info -> driver-name
// ---- driver-name节点元素的xPath路径:/config/database-info/driver-name
Node node = document.selectSingleNode("/config/database-info/driver-name");
Element driverNameElt = (Element) node;
// 4、获取driverNameElt节点元素对象的文本内容
String driverName = driverNameElt.getStringValue();
System.out.println(driverName);
// url: /config/database-info/url config//url //url
Element urlElt = (Element) document.selectSingleNode("config//url");
String url = urlElt.getStringValue();
System.out.println(url);
// user
Element userElt = (Element) document.selectObject("//user");
String user = userElt.getText();
System.out.println(user);
// password
Element pwdElt = (Element) document.selectSingleNode("//password");
String pwd = pwdElt.getText();
System.out.println(pwd);
} catch (DocumentException e) {
e.printStackTrace();
}