XML
JavaWeb之XML
什么是XML
- XML是可扩展标记语言
主要作用
- 存储数据
- 文本流
- 数据流
- 配置文件
- 数据交换
XML与HTML区别
- 语法不通
- HTML不区分大小写
- XML严格区分大小写
- 标记不同
- HTML标记是固有的 、
- XML标记是可扩展的
- 作用不同
- HTML主要作用:在浏览器显示页面的信息
- XML:对数据进行操作
XML语法
- XML文件头
- 作用:对XML文件进行说明描述与设置
- <?xml version="版本号" encoding="UTF-8"?>
XML结构
- 根标记
- 在整个XML文件只能有一个根标记
- 子标记(节点标记)
- 在根标记内可以写一个到多个子标记
- ps:XML中注释与HTML一致
- 使用方式
- 标记必须成对出现
- 区分大小写
- 必须正常嵌套
<?xml version="1.0" encoding="utf-8" ?> <XML> <A> <name>A</name> <price>10</price> </A> <B> <name>B</name> <price>20</price> </B> <C> <name>C</name> <price>30</price> </C> </XML>
XML的有效性
- 良好的结构
- 只要符合XML语法规范要求即可
- 验证
- 验证要求:符合XML语法规则
- 验证要求:只能是指定的标记
XML中的实体
- 实体:是指特殊字符的转义
- 常用实例
- $开头 ;结尾
- lt: <
- gt: >
- amp: &
- apos: '
- quot: "
XML中的CDATA节
- CDATA节中的内容会被忽略掉
- 不被当做XML标记进行解析
- 原封不动的显示出来 、
- 格式
<ul> <li> <![CDATA[ 节中的内容 ]]> </li> </ul>
DTD文件
- 什么是DTD
- 文档类定义:document type defination
- 作用:为XML提供一些,有效的规则
- 如果某一个XML文件使用了指定的DTD验证文件,name该XML文件必须遵照DTD中的规范进行书写
<!ELEMENT XML(A,B,C)> <!ELEMENT A(name,price)> <!ELEMENT name(#PCDATA)> <!ELEMENT price(#PCDATA)> <!ELEMENT B(name,price)> <!ELEMENT name(#PCDATA)> <!ELEMENT price(#PCDATA)> <!ELEMENT C(name,price)> <!ATTLIST C id CDATA #REQUIRED>
XML解析
- 简单来说,就是对XML文件进行CURD
- 常用方式
- SAX
- Simple API for xml
- 基于事件的操作方式
- 优点
- 占用内存空间少
- 通过事件逐一读取
- DOM
- document object model
- 基于文档树的操作方式
- 将整个文件读取到内存中
- 通过DOM对象的方法可以快速\边界的操作整个文件
- 常用的第三方API
- jdom
- dom4j
- 使用jdom操作xml
- 操作步骤
- 导包
- 创建核心工具类SAXBuilder
- 使用SAXBuilder工具类下build方法读取指定的xml文件
- Document dom = builder.build("src/文件.xml")
- 读取指定的xml后会返回整个xml文件的dom对象
- Element root = dom.getRootElement()
- 常用方法
- Document
- getRootElement() -- 获得根元素
- Element
- getName() -- 获取元素(标记)名称
- Element name_element = getChild(String name) -- 获得根元素下的第一个子元素
- getValue() -- 获取值
- getChildren() -- 获得当前元素下所有的子元素
for(Element element : book_first_children){ System.out.println("标签名称"+element.getName()+"标签数据:"+element.getValue()); }
- Attribute attribute = getAttribute(String) -- 获取指定元素中指定的属性
- getAttributeValue(String) -- 获取指定元素中的属性值
- List<Attribute> list = getAttributes() -- 获取指定元素中所有的属性对象
- getText() -- 获取元素文本内容
- getChildText(String) -- 直接获取子元素的文本内容
- getTextTeam() -- 获取去掉两端空格的文本
- Attribute()
- getName() -- 获取名字
- getValue() -- 获取属性值
- xPath
- xPath是一种路径表达式
- 通过一个表达式可以很方便的从xml文件中找到符合条件的节点
- 表达式语法
- /books/book
- 绝对路径
- 默认从根目录开始匹配
- //name
- 从所有位置开始匹配
- *
- 代表任意路径
- []
- 可以选择第几个元素
- |
- 满足两个条件中的一个即可
- @
- 使用@来操作属性
- //book[@id] -- 具有id属性的所有book元素
- //book[@id=123] -- id是123的所有book元素
- 使用xPath路径表达式进行操作XML文件时,需要实例xPath工具对象
- jdom生成xml操作
- 将程序中的数据写入文件
- 流
- 文本
- properties
- properties配置文件
- xml
- 可以实现复杂的数据层次关系
- 需要通过Document文档对象来实现
- 步骤
- 导包
- 在内存创建一个空的Document对象
- 创建多个Element元素对象,设置所有Element的层次结构关系
- 设置Document的根元素
- 通过流将Document输出到xml文件中
如有问题,请发送邮件至buxiaqingcheng@163.com或者buxiaqingcheng@dingtalk.com