1、xml是什么?
xml全称是可扩展标记语言。官网是w3c,可扩展标记语言;和html对比来看,html的标签是规定不变的。xml中
的标签是用户自定义的。
2、xml有什么作用?
1)可以用来来交互和存储数据(json、xml)
2) 配置文件(框架中 web中的配置文件)
3)系统里面编写配置文件的原因:为了追求系统的可维护性,往往会把有些信息写到配置文件中xml。它就是当
系统正式上线后,如果要灵活的 修改系统的相关信息,可以直接到xml配置中进行修改,不需要重写编译、打包、
上线。做到热启动,保证系统的可维护性。
4)当用户要编写自己定义的框架,那么就需要使用xml,同时要学会xml解析。
3、xml编写规范
1)对大小写敏感、严格区分大小写
2) 有开始标签,就有结束标签;它也支持单标签
3)有且仅有一个根节点
4) 字母、下划线、数字,但是数字不能开头,同时标签中间不能有空格
<?xml version="1.0" encoding="UTF-8" ?>
张三
18
男
李四
19
男
**5、dtd相关知识**
1、什么是dtd?
为了保证多个xml的格式是相同的,我们必须有规范,让规范来检查约束我们编写的xml,那么这个规范是用文档
来声明的,这个文档就是所谓的dtd 文件。
2、对于dtd中可以描述的元素如下,实际上在dtd中就是要想办法把xml中的元素、属性、以及元素之间的嵌套关
系、元素出现的顺序、元素出现的次数描述清楚。
1)<!ELEMENT 元素的名称 (子元素列表)> 用于描述元素的,子元素的列表用,隔开的;如果是或者的关系用|,这
里面可以写()
2) <!ELEMENT 元素的名称 #PCDATA> 描述节点最终里面嵌套的是文本的时候
3)描述元素或者节点出现的次数
? :0次或者1次
星号:0次或者n次
加号:1次或者n次
4)<! ATTLIST 节点名字 属性名字 CDARA #REQUIRED>:用来描述节点的属性的
3、dtd和外部js差不多,也需要导入到xml文档。
1)内部dtd,类型html中编写的内部样式。
步骤:
a)编写student1.xml,直接在内部编写dtd规范
<?xml version="1.0" encoding="UTF-8" ?>
<!ELEMENT student (stuname,age,sex)>
<!ELEMENT stuname (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST student stuno CDATA #REQUIRED>
]>
张三
18
男
2)外部dtd,类似html中编写的外部样式.
步骤:
a)编写student.dtd,放在工程的下面,不是src下面。
<?xml version="1.0" encoding="UTF-8" ?>
张三
18
男
**6、xml解析**
1)什么是解析?
a)就是读取xml文件的内容,获得属性的名称、值,节点的名称和节点的值。
b)添加节点和添加属性
c)删除节点和删除属性
d)修改节点和修改属性
2)在Java语言中要解析xml,需要借助第三方提供的包。也可以用jdk自带的包。
a)w3c的方式:jdk自带api,就是编写的很复杂,现在程序员都不喜欢用它。
b)dom4j:开源组织编写的api,用来解析xml,非常简单好用,现在已经是事实上的标准。消耗的内存比较大,因
为它会把xml在内存中形参一颗倒挂的树。
c)JDOM:方式也是很方便的,dom4j是它的一个分支。
d)SAX:是基于事件处理方式的,适合在手机中进行xml解析,它的优势是消化系统的内存很小,缺点是编码复
杂。
2)如何下载?
https://mvnrepository.com/
3)如何将第3方的jar添加到普通Java工程?
步骤:
1)在工程下面添加文件夹lib
2)把jar文件拷贝到lib
3) 选择lib文件夹-add as liberary.
7、dom的API介绍
思路:所以的操作都是基于Document对象的,在dom4j的包中,提供了一个读取器,它有一个方法叫reader(),
只要传入xml的文件名就会返回Document.
1)SAXReader 对象
Document doc=reader(xml文件名);
2)如何获得根节点
Element root=doc.getRootElement();
3) 获得某个元素的子节点集合
List db_list = db_element.elements();//所有子元素
4)获得某个节点下面的子节点
Element db_element = 父元素或者父节点.element("子节点的名字");
5)获得元素的属性
Attribute 属性节点对象 = ele_student.attribute("属性的名字");
String str_id=属性节点对象.getValue();
6)获得元素的内容
元素对象.getText();
8、采用一层一层的方式解析
特点:任何一个节点都必须从根节点开始,一层一层的查找,最后定位到该节点。非常麻烦,不高效。因此后面会
讲解xpath的语法,xpath可以帮助我们快速定义到某个节点。
* 功能:获得student.xml文件中的所有student节点的子节点值和属性值
*/
public static void readerXML() throws Exception {
//1、构建读取器
SAXReader reader = new SAXReader();
//2、获得Document对象
Document document = reader.read("student.xml");
//3、获得根节点students
Element rootElement = document.getRootElement();
//4、获得根节点下面的student节点的集合
List students = rootElement.elements();
//5、循环迭代集合,获得每个student节点
for(int i=0;i