为什么学习XML?
- 网络数据传输
- 数据存储
- 配置文件
为什么不使用java传送对象呢?跨语言(前后端)
语法格式
1. XML文档说明:<?xml version="1。0" encoding=“utf-8” ?>
2.标记
- 根节点只能有一个
- 标记名称区分大小写
- 标记可以嵌套,但不能交叉
- 标记名称允许重复
- 标记里可以有属性,键与值之间使用等号,多个属性使用空格隔开,属性值使用引号,多个属性名称不能重复
3. 注释不能嵌套注释,注释开始<!--注释结束-->
4. 不被解析器解析的数据CDATA
Java读取xml文件
导入jar包
- 项目里添加lib文件夹,复制以下jar包
- 右击导入的包,选择add as library
处理xml文件
- 获取输入流
FileInputStream fileInputStream = new FileInputStream("xml文件路径");
- 创建解析器
SAXReader saxReader = new SAXReader();
- 读取xml获得Document对象
Document document = saxReader.read(fileInputStream);
- 获取根元素
Element root = document.getRootElement();
- 解析元素,如获取元素的名称
root.getName();
- 循环获取root里的所有元素:
attributeValue获取元素的属性值
elementText直接获取元素中的子元素内容
root.element("子元素的名称")可以直接获取子元素
for (Object element: root.elements()) { Element book = (Element) element; System.out.println(book.attributeValue("id")); System.out.println(book.elementText("name")); System.out.println(book.elementText("info")); }
- 关闭输入流
fileInputStream.close();
读取网络传输的xml
- 创建xml来源的url
URL url = new URL("目标url地址"); URLConnection connection = url.openConnection();
- 获得输入流
InputStream inputStream = connection.getInputStream();
- 创建解析器
SAXReader saxReader = new SAXReader();
- 读取xml获得Document对象
Document document = saxReader.read(inputStream);
- 后续操作相同
解析xml-》xpath
- xpath路径:根节点开始以/开头,相对路径//,.表示当前节点,..表示父节点,@选择属性
- 以//选择,可以获得所有name的节点
- 以//book[@id="1001]//name(此时结果只有一个,可以使用singleNode)
通过JAVA生成XML
方式一:通过DocumentHelp创建空文档对象,不断往文档对象里添加元素
ctrl+alt + l可以对生成的xml进行格式化
方式二:利用xstream将对象转化为xml文件
解析区别