XML学习笔记
三、XML的解析
对XML文件进行操作包括创建XML,对XML文件进行增删改查操作。
3.1 常见的XML解析技术
3.1.1 DOM解析
是官方提供的解析方式,基于XML树解析。
3.1.2 SAX解析
是民间的解析方式,基于事件的解析。
3.1.3 JDOM解析
第三方提供,开源免费的解析方式,比DOM快。
3.1.4 DOM4J解析
第三方提供,开源免费,是JDOM的升级版。
3.2 DOM4J解析XML
解析XML的入口,需要先拿到一个Document对象
3.2.1 读取XML
(需要在工作空间文件夹内创建lib文件夹,并在lib中导入dom4j的jar包,并构建路径)
dom4j-1.6.1.jar下载地址:北瑟的博客
//package com.bjsxt.xml;
import java.io.File;
import java.util.Iterator;
import org.dom4j.*;
import org.dom4j.io.SAXReader;
public class TestXml {
public static void main(String[] args) throws Exception {
//[1]创建SAXReader对象,用于读取XML文件
SAXReader reader = new SAXReader();
//[2]读取XML文件,得到Document对象
Document doc = reader.read(new File("src/scores2.xml"));
//[3]获取根元素
Element root = doc.getRootElement();
//[4]获取根元素下所有子元素
Iterator<?> it = root.elementIterator();
while(it.hasNext()){
//取出元素
Element e = (Element) it.next();
System.out.println(e.getName());
//获取id属性
Attribute id = e.attribute("id");
System.out.println(id.getName() + "=" + id.getValue());
Element name = e.element("name");
Element course = e.element("course");
Element score = e.element("score");
//打印
System.out.println(name.getName() + "=" + name.getStringValue());
System.out.println(course.getName() + "=" + course.getStringValue());
System.out.println(score.getName() + "=" + score.getStringValue());
System.out.println("----------------------------------");
}
}
}
3.2.2 将数据写入XML文件
//package com.bjsxt.xml;
package src.com.bjsxt.xml;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import org.dom4j.*;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
public class TestXml2 {
public static void main(String[] args) {
//[1] 通过DocumentHelper生成一个Document对象
Document doc = DocumentHelper.createDocument();
//[2] 添加并得到根元素
Element root = doc.addElement("books");
//[3] 为根元素添加子元素
Element book = root.addElement("book");
//[4] 为book元素添加属性
book.addAttribute("id","b01");
//[5] 为book添加子元素
Element name = book.addElement("name");
Element author = book.addElement("author");
Element price = book.addElement("price");
//[6] 为子元素添加文本
name.addText("Thinking in Java");
author.addText("小伟");
price.addText("88");
/*
//[7] 将doc输出到XML文件中
Writer writer = new FileWriter(new File("src/book2.xml"));
doc.write(writer);
//[8] 关闭资源
writer.close();
*/
//[7] 格式良好的输出P
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer = null;
try {
writer = new XMLWriter(new FileWriter(new File("src/book2.xml")),format);
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
try {
writer.write(doc);
writer.close();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
四、注意事项
4.1 在编写XML时需要转义的字符:
小于 | < | < |
---|---|---|
大于 | > | > |
与 | & | & |
省字号(高撇、单引) | ’ | ' |
双引 | " | " |
4.2 属性
一个标签可以有多个属性,属性的值必须用引号括起来。
4.3 命名
标签、属性命名规则:数字字母下划线,数字不能开头。
4.4 CDATA区域:
内容不解析
<![CDATA[...不解析的内容...]]
<msg><![CDATA[大于号>,小于号<,还有&"']]></msg>