整理自尚硅谷Javaweb课程(后端)及其笔记js仅用作个人笔记留存
链接:尚硅谷javaWeb课程xml部分
XML简介XML语法
文档声明注释元素(标签)
xml元素xml命名规则xml分为单标签和双标签 xml属性语法规则 xml解析技术Dom4j解析技术
Dom4j类库Dom4j文档目录介绍获取document对象
准备工作获取对象 读取xml文件生成java类
XML简介xml是可扩展(即可以自定义)的标记性语言
作用
用来保存数据,而这些数据具有自我描述性可以作为项目或者模块的配置文件可以作为网络传输数据的格式(现在JSON为主) XML语法 文档声明
时间简史 霍金 75 java从入门到入土 学习 3125
注释
与html一样:
元素(标签) xml元素
xml元素是指从开始标签到结束标签的部分
元素可以包含其他元素、文本或者两者的混合物
元素可以拥有属性
xml命名规则名称可以含有字母数字和其他的字符不能以数字或者标点符号开始不能以"xml"开头,其任意大小写也是名称不能 包含空格 xml分为单标签和双标签
单标签和双标签效力相等
单标签的属性等价于双标签的属性加上内部的子标签所包含的内容
xml属性
xml属性可以提供元素的额外信息标签的属性必须用引号引起来
语法规则
所有xml元素都必须关闭标签
xml标签对大小写敏感
xml必须正确的嵌套
xml必须有根元素
根元素是没有父标签的顶级元素,而且是唯一一个
xml的属性值必须加上引号
xml特殊字符
<>
文本区域(CDATA区)
该区域内只是纯文本,不需要xml语法解析格式:
xml解析技术
略,暂时没必要,自己查资料看看即可
Dom4j解析技术 Dom4j类库GitHub地址:Dom4j
Dom4j文档目录介绍
docs
参考文档目录,一般从index界面进入。英文界面
lib
其依赖的第三方jar包
src
第三方类库的源码和测试代码
获取document对象 准备工作
需要解析的xml文件
时间简史 霍金 75 java从入门到入土 学习 3125
根据要解析的内容创建的对应对象类
有无参、全部构造器
get、set方法
toString 方法
package pojo;
import java.math.BigDecimal;
public class Book {
private String sn;
private String name;
private String author;
private BigDecimal price;
public Book() {
}
public Book(String sn, String name, String author, BigDecimal price) {
this.sn = sn;
this.name = name;
this.author = author;
this.price = price;
}
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 String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
@Override
public String toString() {
return "Book{" +
"sn='" + sn + ''' +
", name='" + name + ''' +
", author='" + author + ''' +
", price=" + price +
'}';
}
}
获取对象
创建一个lib目录,并添加dom4j的jar包(以本人使用为例)
添加到类路径: 右键 最下方Add as Library…设置model权限即可(global全部、Project项目、model模型)
创建测试类
将测试需要的两个junit的jar包添加到lib
junit-4.12hamcrest-core-1.3
按照dom4j的文档说明获取对象
package pojo;
import org.dom4j.document;
import org.dom4j.documentException;
import org.dom4j.io.SAXReader;
import org.junit.Test;
public class Dom4jTest {
@Test
public void test01() throws documentException {
//创建一个SAXReaders输入流,去读取xml配置文件,生成document对象
SAXReader saxReader = new SAXReader();
document document = saxReader.read("src/01_books.xml");
System.out.println(document);
}
}
读取xml文件生成java类
package pojo;
import org.dom4j.document;
import org.dom4j.documentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;
import java.math.BigDecimal;
import java.util.List;
public class Dom4jTest {
@Test
public void test01() throws documentException {
//创建一个SAXReaders输入流,去读取xml配置文件,生成document对象
SAXReader saxReader = new SAXReader();
//在Junit测试中,相对路径是从模块名开始的
document document = saxReader.read("src/01_books.xml");
System.out.println(document);
}
@Test
public void test02() throws documentException {
//读取book.xml文件
SAXReader saxReader = new SAXReader();
//在Junit测试中,相对路径是从模块名开始的
document document = saxReader.read("src/01_books.xml");
//通过document对象获取根元素
Element rootElement = document.getRootElement();
//System.out.println(rootElement);
//通过根元素获取book标签对象
//element和elements都是通过标签名查找子元素,但是一个是一个,一个是多个
List books = rootElement.elements("book");
//遍历,处理每个book标签对象转化为Book类
for (Element book : books) {
//asXML()把标签对象转化为标签字符串
//System.out.println(book.asXML());
Element nameElement = book.element("name");
//getTest()获取标签的文本内容
String nameText = nameElement.getText();
//直接获取指定标签的文本内容
//上述也可直接使用String nameTest = .elementTest("name");
String priceTest = book.elementText("price");
String authorTest = book.elementText("author");
//获取标签属性的文本内容
String snValue = book.attributevalue("sn");
System.out.println(new Book(snValue, nameText, authorTest, Double.parseDouble(priceTest)));
}
}
}



