XML语⾔的使⽤和⽂件的解析XML概述
XML是⼀种可扩展性标记语⾔(eXtensible Markup Language),⽂件扩展名.xml
⽤途:描述、传输数据
使⽤场合:
持久化存储数据
数据交换
数据配置
XML的语法和格式
<?xml version="1.0" encoding="UTF-8" ?>
<!--注释格式,开头XML声明语句-->
<!--必须有且仅有⼀个根元素,标签⼤⼩写敏感-->
<Students>
<!--【属性值】使⽤双引号-->
<Student id="2002">
<!--标签成对,且元素要正确嵌套,不允许交叉嵌套-->
<name>张三</name>
<age>28</age>
<class>12班</class>
<!--不含标签体的可以简写-->
<dcr/>
</Student>
<Student id="2003">
<name>李四</name>
<age>25</age>
<class>14班</class>
</Student>
</Students>
⼀个XML元素可以包含字母、数字以及其它⼀些可见字符,但必须遵守下⾯的⼀些规范:
1. 名称可以含字母、数字以及其他的字符
2. 名称不能以数字或者标点符号开始
3. 名称不能以字符 “xml”(或者 XML、Xml)开始
4. 名称不能包含空格
使⽤浏览器验证⽂件格式有效性。
XML解析
对XML⽂件的解析⽅式:
1. 使⽤DOM4J(DOM For Java)实现DOM解析
2. JAXP技术(废弃)
3. SAX解析
4. Pull解析,与SAX解析类似
DOM和SAX解析⽅式⽐较
DOM解析 (Document Object Model) ⽂档对象模型
(1)易⽤性强,使⽤DOM时,将把所有的XML⽂档信息都存于内存中,并且遍历简单,⽀持XPath,增强了易⽤性
(2)效率低,解析速度慢,内存占⽤量过⾼,对于⼤⽂件来说⼏乎不可能使⽤
(3)⽀持增删改查
SAX解析(Simple API for Xml)
(1)⽤于处理XML事件驱动的“推”模型,虽然它不是W3C标准,但它却是⼀个得到了⼴泛认可的API
(2)最⼤的优点是内存消耗⼩
(3)只适合读取
使⽤DOM4J解析
Dom4j是⼀个简单、灵活的开放源代码的库。Dom4j是⼀个⾮常优秀的Java XML API,具有性能优异、功能强⼤和极易使⽤的特点。
使⽤Dom4j开发,需下载Dom4j相应的jar⽂件。
项⽬中如何使⽤DOM4J
IDEA配置:
(1)项⽬中创建⽂件夹lib
(2)把jar包复制到lib⽬录中
(3)右击lib⽂件夹—>Add as Library
Eclipse配置:
(1)项⽬中创建⽂件夹lib
(2)把jar包复制到lib⽬录中
(3)右击jar包—>build path—>add to build path
读写改删操作
DOM是⼀种树结构,上⾯的XML例⼦中,根节点就是Students,其叶⼦节点是Student,属性是⼦⼦节点,所以解析过程也是要从跟节点开始,逐步解析。
1、增加操作
//创建SAXReader类对象,然后使⽤read⽅法读取
SAXReader reader =new SAXReader();
Document document= ad(new File("l"));
//获取根节点
Element root = RootElement();
//根节点下添加元素
Element book = root.addElement("book");
//添加book的【属性值】
book.addAttribute("id","1008");
//添加⼦⼦节点
book.addElement("name").setText("《九阳真经》");
book.addElement("author").setText("张⽆忌");
book.addElement("price").setText("89.9");
//添加的结果还在内存,这⾥需要写⼊到⽂件
/
/1.创建输出格式
OutputFormat outputFormat = atePrettyPrint();
xml文件怎么打开
outputFormat.setEncoding("utf-8");
//2.创建XMLWriter格式⽂件
XMLWriter writer =new XMLWriter(new FileWriter("l"), outputFormat);
//3.写⼊和关闭
writer.write(document);
writer.close();
2、删改操作
//1.创建SaxReader
SAXReader reader =new SAXReader();
/
/2.读取
Document document = ad(new FileReader("l"));
//3.获取根节点
Element root = RootElement();
//4.修改元素
List<Element> bookList = root.elements("book");
Element firstBook = (0);
firstBook.element("price").setText("101");
Element secondBook = (1);
secondBook.element("price").setText("120");
//5.删除最后⼀个
<(bookList.size()-1));
//6.写⼊⽂件
OutputFormat format = atePrettyPrint();
format.setEncoding("utf-8");
XMLWriter writer =new XMLWriter(new FileWriter("l"), format);
//7.写⼊
writer.write(document);
//8.关闭
writer.close();
3.读取操作
public static void readxml()throws Exception{
/
/1创建SaxReader
SAXReader reader=new SAXReader();
//2获取Document对象
Document ad(new FileReader("src\\l"));
//3获取根节点
Element RootElement();//books
//System.out.Name());
//4获取book集合,遍历获取
List<Element> bookList=root.elements("book");
for(Element b : bookList){
//5获取【属性值】
String id=b.attributeValue("id");
//6.获取⼦⼦节点
String name=b.element("name").getText();
String author=b.element("author").getText();
String price=b.elementText("price");
Book book=new Book(Integer.parseInt(id), name, author, Double.parseDouble(price));
System.out.String());
}
}
基本操作⽅式就是⽤SAXReader读取⽂件、获取根节点、然后使⽤element⽅法获取⼦节点和⼦⼦节点等等,最后使⽤XMLWriter写⼊⽂件XML⽂件解析失败问题
XML解析失败,主要是因为BOM头问题导致的,详见
解决办法就是使⽤ notepad++ 打开,然后在上⾯的 “编码” 选项中选择 “使⽤UTF-8编码”,保存即可。