XML、JSON、DOM、DOM4J
XML&JSON
理解XML概念及优势
会编写格式良好的XML⽂档
会使⽤DOM操作XML数据
显⽰/添加/保存
掌握JSON的定义
会使⽤FastJson⽣成、解析JSON
XML是什么
XML(EXtensible Markup Language)
可扩展标记语⾔
特点
XML与操作系统、编程语⾔的开发平台⽆关
实现不同系统之间的数据交换
作⽤
数据交互
配置应⽤程序和⽹站
Ajax基⽯
知道XML的⽂档结构
声明
⽂档元素描述信息(⽂档结构)
初步了解XML的⽂档结构
XML⽂档内容由⼀系列标签元素组成
语法:<;元素名属性名="属性值">元素内容</元素名>
空元素:
<name></name>
<name></name>
<name/>
属性值引号包裹
⼀个元素可以有多个属性
属性值中不能直接包含<、&
不建议使⽤的字符:"、'、>
掌握XML中元素属性的定义注意事项
<?xml version="1.0" encoding="UTF-8"?>
<books>
<!--图书信息-->
<book id = "b001">
<title>图书1</title>
<author>zzx</author>
</book>
<book id = "b002">
<title>图书2</title>
<author>gyy</author>
</book>
<book>
<!--空元素-->
</book>
</books>
总结
XML:可扩展标记语⾔。被⽤来传输和存储数据
XML⽂档由声明及⽂档元素描述信息构成
⼀个元素可以有多个属性
属性值不能使⽤及不建议使⽤的字符可⾃⾏编写观看结果
编写格式良好的XML
思考
XML⽂档元素属性值中不能直接包含<、&
不建议使⽤的字符:"、’、>
掌握XML中常⽤的转义符
XML中的转义符列表
符号转义符(预定义实体)
<  &|t;
>  >
"  "
'  '
&  &
当元素出现很多特殊字符时,可以使⽤CDATA节,CDATA是不应该由XML解析器解析的⽂本数据。如:
<description>
<![CDATA[讲解了元素<title>以及<title>的使⽤]]>
</description>
<?xml version="1.0" encoding="UTF-8"?>
<books>
<!--图书信息-->
<book id = "b001" width = "<20">
输出第⼀部<book></book>;图书信息
<title>图书1</title>
<author>zzx</author>
</book>
<book id = "b002">
<![CDATA[输出第⼆部<book></book>图书信息]]>
<title>图书2</title>
<author>gyy</author>
</book>
<book>
<!--空元素-->
</book>
</books>
掌握XML编写注意事项
注意事项
所有XML元素都必须有结束标签
XML标签对⼤⼩写敏感
XML必须正确的嵌套
同级标签以缩进对齐
元素的名称可以包含字母、数字或其他字符
元素名称不能以数字或者标点符号开始
元素名称中不能含空格
起名称见名知意
编写格式良好的XML练习
练习1:编写XML⽂档
⾐服型号 对应⾝⾼
python处理xml文件S ⾝⾼<165
M 165<⾝⾼<170
L 170<⾝⾼<175
XL 175<⾝⾼<180
XXL 180<⾝⾼<185
<?xml version="1.0" encoding="UTF-8"?>
S
M
L
XL
XXL
练习2:编写XML表⽰学⽣成绩
学⽣姓名预计得分实际得分
王显明  75  80
宋佳  75  88
<?xml version="1.0" encoding="UTF-8"?>
<studentScores>
<!--存储学⽣的预期得分和实际得分-->
<student>
<name>王显明</name>
<expectedScore>78</expectedScore>
<score>88</score>
</student>
<student name="宋佳" expectedSocre="80" socre="90"></student>
</studentScores>
XML命名空间
了解XML命名空间的作⽤
在XML中,元素名称是由开发者定义的,当两个不同⽂档使⽤相同的元素名时,就会发⽣命名冲突使⽤前缀避免命名冲突
使⽤XML命名空间
解决在复杂、⼤型XML⽂件中出现名称相同,但是含义不同的元素
我们还可以在⼀个⽂档中定义多个命名空间
了解XML命名空间的写法
默认命名空间
没有指定前缀的命名空间就会作为页⾯中元素的默认命名空间
除⾮在标签中使⽤其他命名空间的前缀,否则解析器都会认为元素在默认空间下存在
⼀个⽂档中只能有⼀个默认的命名空间
总结
XML命名空间
解决在复杂、⼤型XML⽂件中出现名称相同,但是含义不同的元素
XMLns:前缀
DOM解析XML
了解XML解析技术
DOM
基于XML⽂档树结构的解析
适⽤于多次访问的XML⽂档
特点:⽐较消耗资源
DOM4J
⾮常优秀的Java XML API
性能优异、功能强⼤
开放源代码
SAX
基于事件的解析
适⽤于⼤数据的XML⽂档
特点:占⽤资源少
掌握DOM解析XML的原理
DOM介绍
⽂档对象模型(Document Object Model)
DOM把XML⽂档映射成⼀个倒挂的树
元素节点、⽂本节点、属性节点
掌握常⽤的DOM解析API名称及作⽤
DOM解析包:org.w3c.dom
常⽤接⼝常⽤⽅法说明
Document:表⽰整个XML⽂档  NodeList getElementsByTagName(String Tag) 按⽂档顺序返回⽂档中指定标记名称的所有元素集合        Element createElement(String tagName)  创建指定标记名称的元素
Node:该⽂档数中的单个节点  NodeList getChildNodes()    获取该元素的所有⼦节点,返回节点集合
Element:XML⽂档中的⼀个元素 String getTagName()      获取元素名称
获取Document
掌握DOM解析XML的步骤
1、创建解析器⼯⼚对象
2、解析器⼯⼚对象创建解析器对象
3、解析器对象指定XML⽂件创建Document对象
4、以Document对象为起点操作DOM树
通过代码能获取Document对象
<?xml version="1.0" encoding="UTF-8"?>
<PhoneInfo>
<Brand name="华为">
<Type name="Mate 30 Pro"/>
<Type name="P30 Pro"/>
<Type name="nova 6"/>
</Brand>
<Brand name="苹果">
<Type name="iPhone11 Pro"/>
</Brand>
</PhoneInfo>
import org.w3c.dom.Document;
l.sax.SAXException;
l.parsers.DocumentBuilder;
l.parsers.DocumentBuilderFactory;
l.parsers.ParserConfigurationException;
import java.io.IOException;
public class ParseXMLDemo {
//全局变量:Document对象
Document document = null;
//解析XML⽂件获取相应Document对象
public void getDocument(){
//解析器⼯⼚(DocumentBuilderFactory)
DocumentBuilderFactory factory = wInstance();
try {
//解析器(DocumentBuilder)
DocumentBuilder builder = wDocumentBuilder();
//解析相应XML⽂件获得Document对象
document = builder.parse("l");
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
总结
DOM解析XML步骤通过代码记忆
解析器⼯⼚-解析器-Document对象
获取⼿机信息
通过对DOM树的操作,实现⼿机品牌和型号的获取
需求说明
显⽰“收藏信息.xml”⽂件中收藏的⼿机品牌和型号
代码
//获取⼿机品牌
public void showInfo(){
//获取⼿机品牌
NodeList brand = ElementsByTagName(“Brand”); //循环获取每⼀个⼿机品牌节点
for (int i = 0; i < Length(); i++) {
Node node = brand.item(i);
//把品牌节点转换为品牌元素
Element element = (Element)node;
//获取每个品牌元素的name属性
System.out.Attribute(“name”));

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。