XML(Extensible Markup Language)的缩写,是一种比较流行的数据存储和交换技术。XML的优点是无论那种语言中,解析方式相似。
XML文档结构
<?xml version = "1.0" encoding ="UTF-8"?>
<songs>
<song id="bk001">
<author>周杰伦</author>
<title>一路向北</title>
<description>后视镜里的世界,越来越远的道别</description>
</song>
<song id="bk002">
<author>周杰伦</author>
<title>夜曲</title>
<description>一群嗜血的蚂蚁</description>
</song>
</songs>
XML优势:XML与文件,数据库一样,都可以实现数据的持久化存储。
数据交换:在实际运用中,由于各个计算机所使用的操作系统,数据库不同,因此数据之间的交换是很复杂的,XML格式存储的,使得不同系统,不同软件都能解析统一格式的数据并显示。
常用的几种XML的解析方式 :
DOM:DOM是基于XML的树结构来完成解析的。DOM解析文档时,会根据读取的文档,构建一个驻留内存的树结构,然后就可以使用DOM接口来操作这个树结构。因为整个文档的树结构是驻留在内存中的,所以进行各种操作比较方便,它还支持删除、修改、重新排列等多种功能。DOM解析XML的方式非常适用于多次访问XML的程序,但是DOM解析确实比较消耗资源的。
SAX:SAX是基于事件解析,他是为了解决DOM解析的资源消耗问题而出现的。他不像DOM那样需要建立一颗完整的文档树,而是通过事件处理器完成对文档的解析,因为SAX解析不用事先调入整个文档,所以它的优势是占用资源少,内存消耗少,一般在解析数据量较大的XML文档时采用这种方法
JDOM:JDOM的目的是成为java特定文档模型, 它简化与XML的交互并且比使用DOM更快。 JDOM与DOM有两方面不同:首先JDOM仅使用具体类而不使用接口,这在某方面简化了API, 但是也限制了灵活性,其次,API大量使用了Collection类,使那些已经熟悉这些类的java开发者使用起来更方便,JDOM的优势在于使用20%的精力解决80%JAVA/XML问题。
DOM4J:DOM4J是一个非常优秀的java XML api 具有性能优异,功能强大和易用的特点,同时它是一个开放源代码的软件。
解析的eg:
<?xml version="1.0" encoding="GB2312"?>
<drinks>
<Brand name ="百事可乐">
<Type name ="碳酸饮料"/>
</Brand>
<Brand name ="可口可乐">
<Type name ="碳酸饮料"/>
<Type attribution ="黑色"/>
</Brand>
</drinks>
package com.chunbaosheng.xml;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
public class parsing {
@lombok.SneakyThrows
public static void parsingXML() throws ParserConfigurationException {
DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
//获取DOM解析器
DocumentBuilder db=dbf.newDocumentBuilder();
Document doc=db.parse("C:/Users/Administrator/Desktop/file/123.xml");
NodeList brandList=doc.getElementsByTagName("Brand");
for(int i =0; i<brandList.getLength();i++){
Node brand = brandList.item(i);
Element element=(Element)brand;
String attributeValue=element.getAttribute("name");
System.out.println("attributeValue"+attributeValue);
NodeList types=element.getChildNodes();
System.out.println("types"+types);
for(int j=0;j>types.getLength();j++){
Element typeElement =((Element) types.item(j));
String type=typeElement.getAttribute("name");
System.out.println("饮料:"+attributeValue+type);
}
}
}
public static void main(String[] args) throws ParserConfigurationException {
parsingXML();
}
}
--也可以使用 其他的方式 解析 条条大路通罗马