XML
可扩展标记语言
特性:
1.是一门独立的标记语言
2.具有平台无关性
3.具有自我描述性
用途
1.网络数据的传输
2.数据存储
3.配置文件
XML语法格式
XML文档通常存储在.xml文件中
语法结构
1.文档声明
<?xml Version = "1.0" encoding = "UTF-8"?>
2.标记(元素 / 标签 / 元素)
xml文档,由一个个的标记组成.
语法
开始标记:<元素名称>
结束标记:</元素名称>
标记名称:标记名称是自定义的,命名规则参考java的标识符命名规则
标记内容:开始标记与结束标记之间是标记的内容部分.
例如:
描述一个姓名:张三
3.标记之间可以嵌套,但不可以交叉
正例:
反例:
4.一个XML文档有且仅允许存在一个跟标记
5.标记的嵌套关系(字标记,父标记,兄弟标记,后代标记,祖先标记)
6.标记名称允许重复
7.标记的属性
标记中存在属性,在开始标记位置,编写属性列表
格式:属性由属性名和属性值组成
属性名与属性值之间用 等号连接,属性值由双引号引住
多个属性之间用空白符隔开.
例如:
张三
8.注释
注释开始:<!–
注释结束:–>
案例:
描述一组学生, 存储到一个students.xml文件中
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student id="1001">
<name>小泽马</name>
<age>18</age>
</student>
<student id="1002">
<name>加藤马</name>
<age>19</age>
</student>
<student id="1003">
<name>仓井马</name>
<age>20</age>
</student>
</students>
练习
books.xml
描述一组图书 books . books中至少包含三本图书book
book中包含子节点:
- 图书名称:name
- 图书信息:info
book中包含属性:id
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="1001">
<name>金苹果</name>
<info>讲述了果农辛勤劳动, 种出金色苹果的童话故事.</info>
</book>
<book id="1002">
<name>银苹果</name>
<info>讲述了果农辛勤劳动, 种出银色苹果的童话故事.</info>
</book>
<book id="1003">
<name>铜苹果</name>
<info>讲述了果农辛勤劳动, 种出铜色苹果的童话故事.</info>
</book>
</books>
Java解析XML文档
面试题
问:java中有几种xml文件解析方式?分别是什么?有什么有缺点?
答:两种 或 四种
1.SAX解析
是事件驱动机制的解析方式.
采用逐行读取的方式解析XML,每当读取到一个标记的开始/结束/内容时,触发程序员事先准备好的处理代码,进行处理.
优点:在读取大文件时,节省内存
缺点:
1.因为逐行解析,当解析第N行时,第N+1行的数据已经被释放了
2.因为事件驱动机制,无法告知程序员节点层次
3.sax解析是只读解析,无法修改文档内容.
2.DOM解析
直接将整个文档,加载到内存,在内存中建立文档树模型(树对象)
通过操作文档树。来完成数据的修改 获取和删除
优点:文档一次性加载到内存,可以进行任意的读取 修改和删除。
缺点:文档一次性加载到内存,浪费大量内存,如果文件较大,可能文法解析
3.JDOM解析
是DOM解析的扩张,,与DOM解析的优缺点几乎一致
4.DOM4J解析
是DOM解析的扩张,,与DOM解析的优缺点几乎一致
DOM4J解析XML方式
步骤:
1.引入jar文件(dom4j.jar)
2.创建一个输入流,指向一个xml文件
FileInputStream fis = new FileInputStream(“文件的地址”);
3.创建一个XML文件读取工具对象
SAXReader sr = new SAXReader();
4.通过读取工具对象,读取xml文档输入流,并得到返回值(返回的是读取到的文档对象)
Document doc = sr.read(fis);
5.通过文档对象,获取xml文档中的跟元素对象
Element root = doc.getRootElement();
元素对象Element的常用方法
1.获取节点名称
String name = element.getName();
2.获取节点内容
String text = element.getText();
3.设置节点内容
element.setText(String text);
4.根据子节点名称,获取匹配名称的第一个子节点
Element e = element.element(“节点名称”);
5.获取所有子节点对象
List list = element.elements();
6.获取节点属性值
String value = element.attributeValue(String 属性值);
7.获取子节点内容
String text = element.elementText(String 节点名称);
8.添加子节点
Element e = element.addElement(String 子节点名称);
9.添加属性
element.AddAttribute(String 属性名,String 属性值);
XML文档的生成
步骤:
1.通过文档帮助器(DocumentHelper)创建空的文档对象
Document doc= DocumentHelper.createDocument();
2.通过文档对象。添加跟节点
Element root = doc.addElement(“跟节点名称”);
3.通过根节点丰富文档内容
4.创建一个文件输出流,用于存储xml文件
FlieOutputStream fos = new FileOutputStream(“要存储文件的路径”);
5.将文件输出流转换为xml文件输出流
XMLWrite xw = new XMLWrite(fos);
6.将文档输出到文件中
xw.write(doc);
7.释放资源
xw.close();