XML
什么是xml?
xml是可扩展的标记性语言
xml的作用?
xml 的主要作用有:
1、用来保存数据,而且这些数据具有自我描述性
2、它还可以做为项目或者模块的配置文件
3、还可以做为网络传输数据的格式(现在 JSON 为主)。
xml语法
- 文档声明。
- 元素(标签)
- xml 属性
- xml 注释
- 文本区域(CDATA 区)
文档声明:
新建一个xml文件,在头部声明。
<?xml version="1.0" encoding="UTF-8" ?>
<!--vesion是xml的版本,encoding表示xml文件的编码-->
<?xml version="1.0" encoding="UTF-8" ?>
<!--vesion是xml的版本,encoding表示xml文件的编码-->
<books>
<book sn="图书编号1">
<name>a</name>
<!-- <是小于号的转义,>是大于号的转义-->
<!-- <author><aa></author> -->
<author>
<!-- CDATA告诉xml文件这里面是文本就不会解析括号-->
<![CDATA[<aa>]]>
</author>
<price>aaa</price>
</book>
<book sn="图书编号2">
<name>b</name>
<author>bb</author>
<price>bbb</price>
</book>
</books>
xml介绍和获取
attribute是属性,比如上面的sn就是属性,为元素提供额外的信息
最底层的元素叫根元素
获取xml文件中的内容
- 导入一个叫dom4j的jar包,dom4j就是专门用来处理xml文件的包。
- 读取books.xml(创建一个saxreader输入流,去读取xml文件,生成doucument对象)
- 通过Document对象获取根元素
- 通过根元素获取book标签对象
- 遍历,处理每个book书签转换成book类
里面的一些方法:
①Document对象获取根元素:.getRootElement()
②根元素获取子元素:.element(获取一个子元素,要给定名字) / .elements(获取多个子元素,可以给定名字也可以不给)
③子元素的操作:
.element():继续获取子元素
.getText():可以获取标签中的文本内容
.elementText(指定标签名):直接获取指定标签名的文本内容
.attributeValue(指定属性名):获取指定属性名的内容
.asXML():把标签对象,转换为标签字符串
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;
import java.util.List;
/**
* @Author: yyyzl
* @Date: 2020/9/28
**/
public class Dom4j {
@Test
public void test1() throws DocumentException {
//创建一个saxreader输入流,去读取xml文件,生成doucument对象
SAXReader saxReader=new SAXReader();
Document read = saxReader.read("src/book/books.xml");
System.out.println(read);
}
@Test
public void Test2() throws DocumentException {
//1 读取books.xml
SAXReader reader=new SAXReader();
//在Junit测试中,相对路径是从模块名开始算
Document document = reader.read("src/book/books.xml");
//2 通过Document对象获取根元素
Element rootElement = document.getRootElement();
// System.out.println(rootElement.getName());
//3 通过根元素获取book标签对象
List<Element> elements = rootElement.elements("book");
//4 遍历,处理每个book书签转换成book类
for(Element e:elements){
//asXML() 把标签对象,转换为标签字符串
//element:取到指定名字的element
Element name = e.element("name");
//getText():可以获取标签中的文本内容
String text = name.getText();
//直接获取指定标签名的文本内容
String price = e.elementText("price");
//获取标签上的属性值
String snvalue=e.attributeValue("sn");
System.out.println(e.asXML()); //把xml整个输出
System.out.println(name.asXML()); //<name>a</name>
System.out.println(text); //a
System.out.println(price); //aaa
System.out.println(snvalue); //图书编号1
}
}
}