2XML
XML
1简介
什么是xml
- xml是可扩展的标记性语言
xml的作用
- 用来保存数据,而且这些数据具有自我描述性
- 它还可以作为项目或者模块的配置文件
- 还可以做为网络传输数据的格式(现在以JSON为主)
2xml语法
2.1文档声明
<!-- 我们先创建一个book.xml文件 -->
<?xml version="1.0" encoding="utf-8" ?>
<!--声明 version表示版本 encoding表示xml文件本身的编码 -->
<books>
<book sn="100">
<name>时间简史</name>
<author>霍金</author>
<price>75</price>
</book>
<book sn="101">
<name>java</name>
<author>范老师</author>
<price>9.9</price>
</book>
<book sn="102" name="辟邪剑谱" author="lala" price="999" />
</books>
2. 2元素
- xml元素指的是从(且包括)开始标签到(且包括)结束标签的部分,我们可以简单理解为标签
- 命名规则
- 名称可以含字母,数字以及其他的字符
- 名称不能以数据或者标点符号开始
- 名称不能包含空格
- 元素也分为单标签和双标签
2.3属性
- xml的标签属性和html的标签属性是非常类似的,属性可以提供元素的额外信息
- 在标签上可以书写属性,一个标签上可以书写多个属性,每个属性的值必须使用引号引进来
2.4语法规则
- 所有xml元素都必须有关闭标签
- xml标签对大小写敏感
- xml必须正确地嵌套
- xml文档必须有且仅有一个根元素,根元素就是顶级元素,没有父标签的元素叫顶级元素
- xml中的特殊字符:<特殊字符:lt >特殊字符:>
2.5文本区域(CDATA区)
- CDATA语法可以告诉xml解析器,我CDATA里的文本内容,只是纯文本,不需要xml语法解析
- 格式: <![CDATA]这里可以把你输入的字符原样显示,不会解析xxml]]>
<![CDATA[
<<<fao>>>
]]
3xml解析技术
- 不管是html文件还是xml文件,它们都是标记型文档,都可以使用w3c组织制定的dom技术来解析
- 早期JDK为我们提供了两种xml解析技术DOM和Sax,已经过时。
- 第三方解析:jdom在dom基础上进行了封装;dom4j又对jdom进行了封装;pull主要用于再Android手机开发,是在跟sax非常类似
4 Dom4j类库的使用
简介
- 由于dom4j它部署sun公司的技术,而是属于第三方公司的技术,我们需要使用dom4j就需要到dom4j官网下载dom4j的jar包
dom4j编程步骤
- 先加载xml文件创建Document对象
- 通过Document对象拿到根元素
- 通过根元素.标签名,可以返回一个集合,这个集合里放着所有指定的标签名的元素对象
- 找到你想要修改,删除的子元素,进行相应在的操作
- 保存到硬盘上
<?xml version="1.0" encoding="utf-8" ?>
<books>
<book>
<sn>sn100</sn>
<name>时间简史</name>
<price>75</price>
<author>霍金</author>
</book>
<book>
<sn>sn103</sn>
<name>java</name>
<price>9.9</price>
<author>范老师</author>
</book>
</books>
@Test
public void test1() throws Exception{
//要创建一个document对象,我们需要先创建一个SAXReader对象
SAXReader saxReader=new SAXReader();
//这个对象用于读取xml文件,然后返回一个Document
Document document = saxReader.read("D:\\java\\javaweb\\xml\\src\\books.xml");
System.out.println(document);
//org.dom4j.tree.DefaultDocument@5cb9f472 [Document: name D:\java\javaweb\xml\src\books.xml]
}
//读取book.xml文件生成book类
//先创建book类
public class Book {
private String sn;
private String name;
private double price;
private String author;
public String getSn() {
return sn;
}
public void setSn(String sn) {
this.sn = sn;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public Book(String sn, String name, double price, String author) {
this.sn = sn;
this.name = name;
this.price = price;
this.author = author;
}
public Book() {
}
@Override
public String toString() {
return "src.pojo.Book{" +
"sn='" + sn + '\'' +
", name='" + name + '\'' +
", price=" + price +
", author='" + author + '\'' +
'}';
}
}
//读取book.xml文件生成book类
@Test
public void test2() throws Exception{
//1读取Books.xml文件
SAXReader saxReader=new SAXReader();
Document document = saxReader.read("D:\\java\\javaweb\\xml\\src\\books.xml");
//2通过Document对象获取根元素对象
Element rootElement = document.getRootElement();
System.out.println(rootElement);
System.out.println();
//3通过根元素获取book标签对象
//element和elements都是通过标签名查找子元素
List<Element> books = rootElement.elements("book");
//4处理每个book标签转换为Book类
for (Element book:books){
//asxml()把标签对象转换为标签字符串
//System.out.println(book.asXML());
Element nameElement = book.element("name");
System.out.println(nameElement);
//gettext获取标签中的文本内容
String nameTest = nameElement.getText();
System.out.println(nameTest);
//直接获取指定标签名的文本内容
String priceText = book.elementText("price");
System.out.println(priceText);
String authorText = book.elementText("author");
String snText = book.elementText("sn");
Book bookxml = new Book(snText,nameTest,Double.parseDouble(priceText),authorText);
System.out.println(bookxml);
System.out.println();
}
}
/*
输出结果:
org.dom4j.tree.DefaultElement@31a5c39e [Element: <books attributes: []/>]
org.dom4j.tree.DefaultElement@56ac3a89 [Element: <name attributes: []/>]
时间简史
75
src.pojo.Book{sn='sn100', name='时间简史', price=75.0, author='霍金'}
org.dom4j.tree.DefaultElement@2d928643 [Element: <name attributes: []/>]
java
9.9
src.pojo.Book{sn='sn103', name='java', price=9.9, author='范老师'}
Process finished with exit code 0
*/

浙公网安备 33010602011771号