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