Java 解析 XML
XML
1.XML
简介
XML
:
Extensible Markup Language
的缩写,即可扩展标记语言。是 一种简单的数据存储语言,使用一系列简单的标记来描述数据。
2.XML
特点
1
、
XML
与操作系统、编程语言等开发平台都无关。
2
、规范统一。
3.XML
声明
<?xml version="1.0" encoding="UTF-8"?>
表示
XML
声明,用以标明该文件是一个 XML
文档,它定义了
XML
的 版本和所使用的编码等信息。XML
包括:
1
、
version:
文档符合
XML1.0
规范;
2、
Encoding:
文档字符编码,默认为“UTF-8”;
4.XML
标签
用尖括号
<>
括起来的各种标签。标签成对使用来界定字符数据。
5.XML
元素
每个
XML
文档有且仅有
一个根元素,根元素特点如下:
1、
根元素包括文档中所有其它元素;
2
、根元素的起始标签要放在所有其它元素之前;
3
、根元素的结束标签要放在所有其它元素之后;
6.XML
属性
<
student
age
=
"
31
"
>中的
age
即为
student
的属性,
31
为属性值。
一个元素可以有多个属性,多个属性之间用空格隔开。
7.XML
中的特殊字符的处理
<![CDATA[
要处理的特殊字符。。。
]]>
8.XML
中的注释
注释的语法为:
<!--这是注释的内容 -->
9.XML
文档格式良好
1、
必须有
XML
声明;
2、
必须有且仅有一个根元素;
3
、标签大小写敏感;
4、
属性值用双引号;
5
、标签成对;
6
、元素正确嵌套;
10. XML
优势
1
,数据存储
2
,数据交换
3
,数据配置
11.
XML
声明命名空间
命名空间是在
XML
文档中可以用作元素或属性名称的名称集合,它
们标识来自特定域(标准组织、公司、行业)的名称。语法:
xmlns:[prefix]=”命名空间的 URI”
12.
XML
文件的解析
1
、
DOM
技术
2
、
SAX
技术
3
、
JDOM
技术
4
、
DOM4J
技术 (异能优异,功能强大,简单易用)
13.
使用
DOM4J
解析
XML
文件
1
,导入
dom4j
的
jar
包;
2
,指定要解析的
xml
文件;
3
,把
xml
文件转换成
Document;
4
,获取节点属性或文本内容;
14.
使用
DOM4J
读
XML
文件案例:
1、导入dom4j-1.6.1.jar
2、books.xml 文件内容如下: (该文件位置在项目根目录下。)
<?xml version="1.0" encoding="GBK"?>
<books>
<!--books根元素,根节点-->
<book id = "101">
<!--id = “101” 是属性-->
<name>Java从入门到精通</name>
<author>Tony</author>
<price>55.80</price>
</book>
<book id = "102">
<name>MySql从入门到精通</name>
<author>Tony</author>
<price>75.80</price>
</book>
<book id = "103">
<name>HTML从入门到精通</name>
<author>Tony</author>
<price>69.80</price>
</book>
</books>
3、在src的包里建一个ReadXML.class的类
public class ReadXML {
public static void main(String[] args) {
List<Books> list = readXmlFile();
for (Books b: list) {
System.out.println(b.toString());
}
}
//解析xml ,读取里面的内容
private static List<Books> readXmlFile() {
//1.添加dom-1.6.1.jar
SAXReader sax = new SAXReader();
List<Books> list = new ArrayList<>();
try {
//books.xml 必须放在项目的根目录上
Document doc = sax.read("books.xml");
//获取xml文件中的根元素
Element root = doc.getRootElement();
System.out.println(root.getName()); //books
//获取xml文件中的根元素下面的三个子元素
Iterator<Element> it = root.elementIterator();
while (it.hasNext()){
Element e = it.next();
System.out.println(e.getName());
//获取book的属性id
Attribute attr = e.attribute("id");
String id = attr.getValue();
System.out.println("id = " + id);
//继续获取book元素下面的三个子元素
Iterator<Element> its = e.elementIterator();
//定义一个字符串数组,用来存储下面三个子元素
String[] sts = new String[3];
//定义一个计数器,也是索引
int i = 0;
while(its.hasNext()){
Element elet = its.next();
String text = elet.getText();
sts[i] = text;
i++;
}
Books b = new Books(id,sts[0],sts[1],sts[2]);
list.add(b);
}
} catch (DocumentException e) {
e.printStackTrace();
}
return list;
}
}
16.
使用
DOM4J
读写
XML
文件总结:
在src的包里建一个WriteXML.class的类
public class WriteXML {
public static void main(String[] args) {
//写xml;
writeXml();
}
private static void writeXml() {
//输出流格式化
OutputFormat format = OutputFormat.createPrettyPrint();
//设置编码格式
format.setEncoding("UTF-8");
//创建一个document对象
Document doc = DocumentHelper.createDocument();
//创建根元素的节点
Element root = doc.addElement("books");
//根据根元素创建子元素
for (int i = 0; i < 4; i++) {
Element ele = root.addElement("book");
//创建属性
ele.addAttribute("id","1001"+i);
//创建三个子元素
Element name = ele.addElement("name");
Element author = ele.addElement("author");
Element price = ele.addElement("price");
//给子元素赋值
name.addText("人生"+i);
author.addText("路遥"+i);
price.addText("106.00");
}
//开始准备写入数据
XMLWriter writer = null;
try{
writer = new XMLWriter(new FileWriter("out.xml"),format);
writer.write(doc);
System.out.println("out.xml文件写入完成!");
} catch (IOException e){
e.printStackTrace();
} finally {
//关闭
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
在项目根目录可以看到写入的out.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="10010">
<name>人生0</name>
<author>路遥0</author>
<price>106.00</price>
</book>
<book id="10011">
<name>人生1</name>
<author>路遥1</author>
<price>106.00</price>
</book>
<book id="10012">
<name>人生2</name>
<author>路遥2</author>
<price>106.00</price>
</book>
<book id="10013">
<name>人生3</name>
<author>路遥3</author>
<price>106.00</price>
</book>
</books>