xml
可扩展的标记语言,可以用来做文件的存储,或者数据传输。现在基本用作于框架的配置文件,用来做数据的存储。
如何编写xml文件:
1.第一行一定是声明
<?xml version="1.0" encoding="UTF-8"?>
2.根标签只有一个
3.标签名区分大小写
4.标签全部都是成对出现(封闭标签)
5.标签可以自定义
6.注释 <!-- -->
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<name>红楼梦</name>
<author>曹雪芹</author>
<price>10.00</price>
</book>
<book>
<name>三国演义</name>
<author>罗贯中</author>
<price vipPrice="40.00">50.00</price>
</book>
<book>
<name>水浒传</name>
<author>施耐庵</author>
<price>30.00</price>
</book>
<book>
<name>西游记</name>
<author>吴承恩</author>
<price>30.00</price>
</book>
</books>
xml解析
对xml文件的内容进行操作的过程
XML的解析方式分为四种:1、DOM解析;2、SAX解析;3、JDOM解析;4、DOM4J解析。其中前两种属于基础方法,是官方提供的平台无关的解析方式;后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于java平台。
DOM解析:将整个文件加载到内存中,再一行行进行解析
缺点:占内存,容易产生内存溢出。
SAX解析:为了解决内存溢出,每加载一行解析一行。
缺点:效率低
dom4j解析
dom4j特征:
1、JDOM的一种智能分支,它合并了许多超出基本XML文档表示的功能。
2、它使用接口和抽象基本类方法。
3、具有性能优异、灵活性好、功能强大和极端易用的特点。
4、是一个开放源码的文件
因此我们使用dom4j解析xml文件
dom4j 全称document Object Model for java
导包:dom4j-1.6.1.jar
解析方式:
1.获取SAXReader解析器
2.获取整个文档(获取文档对象)
3.先获取根标签
4.然后根据根标签来一层一层的获取其他标签
例子
package com.bucishu.xml;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class parseXmlDemo {
public static void main(String[] args) throws DocumentException{
// 获取解析器
SAXReader saxReader = new SAXReader();
//(获取文档对象)
Document read = saxReader.read("src/books.xml");
System.out.println(read);
//获取跟标签
Element rootElement = read.getRootElement();
}
}
package com.bucishu.xml;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class parseXmlDemo02 {
static Document read=null;
static Element rootElement=null;
static{
SAXReader saxReader = new SAXReader();
try {
read = saxReader.read("src/books.xml");
rootElement = read.getRootElement();
} catch (DocumentException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws DocumentException{
test1();
test2();
}
private static void test1() {
//获取第一本书的价格
List<Element> list = rootElement.elements("book");
Element element = list.get(0);
Element element2 = element.element("author");
//获取标签内容
String text = element2.getText();
System.out.println(text);
}
public static void test2() {
List<Element> list = rootElement.elements("book");
Element element3 = list.get(1);
Element e = element3.element("price");
Attribute attribute = e.attribute("vipPrice");
String value = attribute.getValue();
System.out.println(value);
}
}
Xpath解析
通过以上操作发现,也比较麻烦。因此采用xpath路径查询方式
List d.selectNodes(String xpath); 复数,适用于多个标签的操作
Node d.selectSingleNode(String xpath) 当个标签操作
导包:jaxen-1.1.2.jar
public static void test3(){
Node node = d.selectSingleNode("/books/book[1]/description");
String text = node.getText();
System.out.println(text);
}
//获取vipPrice的值
public static void test4(){
Element node =(Element)d.selectSingleNode("//*[@vipPrice]");
String value = node.attributeValue("vipPrice");
System.out.println(value);
}
//查询books.xml中的所有标签名
public static void test5(){
List<Node> list = d.selectNodes("//*");
for(Node n:list){
System.out.println(n.getName());
}