1.eXtensible MarkUp Language
* 可扩展标记性语言
*用途:存储数据
2.XML用途
*不同系统之间数据的传输
*有利于提高数据的维护性
3.XML语法
1)xml的文档声明:<?xml version="1.0" encoding="utf-8" ?> 写在第一行第一列
ios8859-1(不包含中文的编码方式)
*xml中文乱码问题解决:设置编码和保存文件的编码保持一致!
2)定义元素(标签)
*标签有开始必须有结束标签
*标签没有内容可以在标签内结束 <a/>
*标签需要合理嵌套
*一个xml中只能有一个根标签
*在xml中会把空格和换行都当做内容来解析
**xml中标签命名规则:
xml中区分大小写、名称不能以数字或者下划线开头、不能以xml、XML、Xml开头、不能包含空格和冒号
3)xml属性定义
4)xml注释 :<!-- 注释不能嵌套-->
5)xml中的特殊字符(一些转义字符)
6)CDATA区:可以解决多个字符都需要转义的操作
<![CDATA [ 内容 ] ]> 把特殊字符当做文本内容
7)PI指令:在XML中设置样式,对中文标签不起作用
4.xml约束
使得标签内的内容符合正常的规范或者常识
xml约束技术:dtd约束 和schema约束
1)dtd约束:
--》看xml中有多少个元素,有几个元素再dtd中写多少个ELEMENT
--》判断元素是简单元素还是复杂元素(有子元素)
--》在xml中引入dtd文件
<!DOCTYPE 根元素名称 SYSTEM "DTD文件路径">
XML文件 人:姓名、年龄
引入dtd文件
<!DOCTYPE person SYSTEM "test.dtd">
<person>
<name>dzg</name>
<age>23</age>
</person>
test.dtd文件内容:
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
2)dtd文件的三种引入方式
*引入外部文件
*内部dtd
<!ELEMENT person [
内容
]>
*引入外部的dtd文件,网络上的dtd文件
5、DTD语法格式 <!ELEMENT 元素名 约束>
简单元素:
*(#PCDATA)元素为字符串类型
* EMPTY 元素为空
* ANY 任意
复杂元素:
*表示子元素出现的次数 +:出现一次或者多次、*:0次或者多次、?:0次或者一次
w3c文档有很多的实例
5.XML解析(*****)
xml解析方式:
1)dom方式
2)sax方式
想要解析XML文件,首先要提供解析器,通过api方式提供
* sun公司提供 jaxp
*dom4j组织提供 dom4j(实际开发中使用最多)
Jdom提供的jdom
6.jaxp的api查看
jaxp是java se的一部分
jaxp解析器在jdk在javax.xml.parsers包里面
关于类中的方法查看API文档
四个类:分别针对dom和sax解析使用的类
***dom:
DocumentBuilder:解析器类
抽象类,不能new
此类的实例可以从DocumentBuilderFactory.newDocumentBuilder()方法获取
DocumentBuilderFactory:解析器工厂
抽象类,不能new
newInstance()获取DocumentBuilderFactoy的实例
***sax:
SAXParser:解析器类
SAXPaeserFactory:解析器工厂
JAXP解析xml文件实例:
public class TestJaxp {
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
/*
* 1.创建文件解析工厂
* 2.根据解析工厂创建解析器
* 3.解析xml文件返回document
* 4.获取所有name元素的值
* 5.返回集合并遍历,输出所有name
*/
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("src/person.xml");
NodeList nodeList = document.getElementsByTagName("name");
for(int i=0;i<nodeList.getLength();i++) {
Node node = nodeList.item(i);
String str = node.getTextContent();
System.out.println(str);
}
}
}
xml文件内容
<?xml version="1.0" encoding="UTF-8"?>
<person>
<p1>
<name>zhangsan</name>
<age>23</age>
</p1>
<p1>
<name>wangba</name>
<age>23</age>
</p1>
</person>
7.使用jaxp添加节点
修改标签内容
删除标签节点
遍历标签节点