XML笔记
xml是可扩展的标记语言
xml作用:
- 用来保存数据,而且这些数据具有自我描述性
- 作为项目或模块的配置文件
- 作为网络传输数据的格式(现在JSON为主)
xml文件的声明
version表示xml的版本
encoding表示xml文件本身的编码
<?xml version="1.0" encoding="utf-8" ?>
<?xml version="1.0" encoding="utf-8" ?> <books> <!--表示多个图书信息--> <book sn="SN123456"> <!--表示一个图书信息--> <name>人生</name> <!--表示书名--> <author>路遥</author> <!--表示作者--> <price>40</price> <!--表示图书价格--> </book> </books>
xml元素指的是从开始标签直到结束标签的部分。元素可包含其他元素、文本或两者的混合,元素也可以拥有属性。
xml元素命名规则
- 名称可以包含字母、数字以及其他的字符
- 名称不能以数字或者标点符号开始
- 名称不能以字符“xml”(或者XML、Xml)开始
- 名称不能包含空格
xml属性:属性可以提供元素的额外信息,每个属性的值必须使用引号括起来(单引号和双引号都行)
xml标签对大小写敏感
xml文档必须有根元素:根元素是没有父标签的元素,而且根元素必须是唯一的
xml中的特殊字符
> >
< <
文本区域(CDATA区)
CDATA语法可以告诉xml解析器,CDATA里的文本内容,只是纯文本,不需要xml语法解析
CDATA格式:<![CDATA[内容]]>
xml解析技术
不管是html文件还是xml文件它们都是标记型文档,都可以使用w3c组织制定的dom技术来解析


dom4j解析技术
首先导入dom4j依赖
dom4j编程步骤:
- 先加载xml文件创建Document对象
- 通过Document对象拿到根元素对象
- 通过根元素 .elements(标签名); 可以返回一个集合,这个集合里放着所有指定的标签名的元素对象
- 找到你想要修改、删除的子元素,进行相应的操作
- 保存到硬盘上
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 class Dom4jTest {
@Test
public void test01() throws Exception {
//创建一个SAXReader输入流,去读取xml配置文件,生成Document
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("src/books .xml");
System.out.println(document);
}
/**
*读取books.xml 文件生成Book类
*/
@Test
public void test02() {
//1、读取books.xml文件
SAXReader saxReader = new SAXReader();
//在Junit测试中,相对路径是从模块名开始算
Document document = saxReader.read("src/books.xml");
//2、通过Document对象获取根元素
Element rootElement = document.getRootElement();
//3、通过根元素获取book标签对象
//element()和elements() 都是通过标签名查找子元素,后者返回是一个List
List<Element> books = rootElement.elements("book");
//4、遍历,处理每个book标签转换为Book类
for (Element book : books) {
//通过getText(); 获取标签中的文本内容
Element nameElement = book.element("name");
String nameText = nameElement.getText();
//直接获取指定标签名的文本内容
String authorText = book.elementText("author");
String priceText = book.elementText("price");
String snValue = book.attributeValue("sn");
System.out.println(new Book(snValue, nameText, Double.parseDouble(priceText), authorText));
}
}
}
浙公网安备 33010602011771号