day27【xml、dom4j】课上

    技术2026-03-18  4

    一.xml的创建以及文档声明

    创建方式1: 直接创建file,取名为xxx.xml 创建方式2: 配置模板:setting->搜索template->new->添加xml模板 文档声明:写在xml文档的第一行:(直接写会报错,因为每个xml都要有一个根标签) <?xml version="1.0" encoding="UTF-8"?>

    二.xml的注释

    <!-- 注释 -->

    三.xml的组成部分之标签(元素)以及注意事项

    <?xml version="1.0" encoding="UTF-8" ?> <!-- 1.xml的组成部分:元素(标签) Element 2.定义格式: <标签名>标签体</标签名> 闭合标签 <标签名/> 自闭合标签 <标签名1> <子标签>子标签体</子标签> </标签名1> -->标签中套标签 3.注意事项: a.标签名区分大小写 b.标签不能有空格 : c.不建议以XML、xml、Xml开头,不要以数字开头 d.一个良好的xml文档,都会有一个根标签 --> <persons> <user> <name> </name> </user> </persons>

    四.xml的标签属性定义以及注意事项

    <?xml version="1.0" encoding="UTF-8" ?> <!-- 标签中有属性: attribute 1.定义格式: 属性名="属性值" 2.注意事项: a.它必须出现在标签的开始标签中 b.一个标签素可以有0~N个属性,但一个标签中不能出现同名属性 c.属性名不能使用空格、冒号等特殊字符,且必须以字母开头 --> <persons id="001" name="jack"> <user username="username">用户</user> </persons>

    五.xml中的转义字符

    <?xml version="1.0" encoding="UTF-8" ?> <!-- 转义字符: 不用记,看图就完事了 < &lt; > &gt; --> <persons> <!-- 1<5?1:5;->不行,因为<会被认为是标签的< --> 1&lt;5?1:5; </persons>

    六.xml中的xml文档约束

    虽然,xml中的标签可以随便写,但是我们开发中也不能随便写,因为我们是一个团队,如果每个人都写自己喜欢的标签,那么我们整合的时候,就会出现问题,所以,以后开发编写xml是需要文档约束的. 常见的xml约束有:dtd,schema

    七.根据DTD约束编写xml文档

    直接粘贴dtd文件,粘贴一以下代码: <?xml version="1.0" encoding="UTF-8"?> <!-- 传智播客DTD教学实例文档。 模拟spring规范,如果开发人员需要在xml使用当前DTD约束,必须包括DOCTYPE。 格式如下: <!DOCTYPE beans SYSTEM "bean.dtd"> --> <!ELEMENT beans (bean*,import*) > <!ELEMENT bean (property*)> <!ELEMENT property (#PCDATA)> <!ELEMENT import (#PCDATA)> <!ATTLIST bean id CDATA #REQUIRED className CDATA #REQUIRED type CDATA #IMPLIED > <!ATTLIST property name CDATA #REQUIRED value CDATA #REQUIRED > <!ATTLIST import resource CDATA #REQUIRED> <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE beans SYSTEM "bean.dtd"> <beans> <bean id="001" className="name"> <property name="taoge" value="13"></property> </bean> <bean id="001" className="name"> <property name="taoge" value="13"></property> </bean> <import resource="name"></import> <import resource="name"></import> </beans>

    八.DTD约束阅读

    各部分解释: DOCTYPE:文档类型 beans:根标签 SYSTEM:本地系统文件 "bean.dtd":产生关系的文件名 bean*:可以写多个bean标签 (bean*,import*):,表示标签顺序 #PCDATA:此标签体中应该是文本 CDATA:代表的是标签中的属性值为字符型 #REQUIRED:属性值必须设置

    九.schema约束介绍

    Schema是新的XML文档约束; Schema要比DTD强大很多,是DTD 替代者; Schema本身也是XML文档,但Schema文档的扩展名为xsd,而不是xml。 Schema 功能更强大,数据类型更完善 Schema 支持名称空间

    十.命名空间的介绍(相当于导包)

    平时我们new Date的时候,需要导 java.util.Date 但是java.sql.Date中也有Date,如果是sql包的Date,我们需要new Date(1L) 那么命名空间就相当于导包,能够明确我们使用的是哪个约束文件中的内容

    十一.根据Schema约束编写xml文件

    1.直接粘贴schema约束文档 <?xml version="1.0" encoding="UTF-8"?> <!-- 传智播客Schema教学实例文档。 模拟spring规范,如果开发人员需要在xml使用当前Schema约束,必须包括指定命名空间。 格式如下: <beans xmlns="http://www.itcast.cn/bean" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.itcast.cn/bean bean-schema.xsd" > --> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.itcast.cn/bean" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.itcast.cn/bean" elementFormDefault="qualified"> <!-- 声明根标签 1. <element> 声明元素(标签) 2. 每一个元素必须确定类型: complexType 复杂类型 simpleType 简单类型,一般不用,大部分都是复杂类型 3. 需要继续明确子标签出差顺序 <choice> 选择, () <sequence> 顺序 , <all> 任意 minOccurs 最少出现次数 maxOccurs 最大出现次数,unbounded 不限制(没有边) 4.<attribute>用于给元素声明属性的 use 设置属性使用, optional可选、required必选 --> <element name="beans"> <complexType> <choice minOccurs="0" maxOccurs="unbounded"> <element name="bean"> <complexType> <sequence minOccurs="0" maxOccurs="unbounded"> <element name="property"> <complexType> <attribute name="name" use="optional"></attribute> <attribute name="value" use="required"></attribute> </complexType> </element> </sequence> <attribute name="id" use="required"></attribute> <attribute name="className" use="required"></attribute> </complexType> </element> <element name="import"> <complexType> <attribute name="resource" use="required"></attribute> </complexType> </element> </choice> </complexType> </element> </schema> 根据Schema约束编写xml: <?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.itcast.cn/bean" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.itcast.cn/bean bean-schema.xsd" > <!-- xmlns="约束文档的命名空间的名字" W3C万维网联盟, 名字必须做到全球唯一性(互联网地址) bean是我们自定义的文件名,不用的文件可以取不同的名字 xmlns:xsi="地址"是W3C的官方约束文档 xsi:schemaLocation="属性值标明了约束文档的位置所在" http://www.itcast.cn/bean 命令空间的名字和第一个xmlns对应 bean-schema.xsd 是约束文档的路径和文件名 --> <bean id="001" className="taoge"> <property value="haha"></property> </bean> <import resource="root"></import> </beans>

    十二.dom4j解析器的核心API介绍

    * 使用DOM思想,读取xml文件 * 介绍dom4j 核心类 * 1: SAXReader DOM解析思想的核心类 * 方法: read(绑定了这个xml文件的输入流) 读取xml文件 * 返回文档对象,返回值是Document对象 * * 2: Document对象 * 方法: getRootElement()获取文档的根标签 * 返回值,返回的是标签对象 Element * * 3:Element标签对象 * 方法获取子标签 List<Element> elements() * 返回所有的子标签集合List * * 方法 String attributeValue(String 属性名) 获取属性值 * 方法 String getText() 获取到的是,标签体的文本部分

    十三.利用dom4j解析xml文档代码实现(将xml文件放在src下面)

    1.创建person.xml <?xml version="1.0" encoding="UTF-8" ?> <beans> <bean id="001" className="cn.itcast.demo.person"> <property name="user" value="jack">杰克</property> <property name="user" value="rose">肉丝</property> </bean> <bean id="002" className="cn.itcast.demo.Admin"> <property name="user" value="admin">管理员</property> <property name="user" value="write">怀特</property> </bean> </beans> 2.解析: public class Test01_Dom4J { public static void main(String[] args) throws Exception{ InputStream inputStream = Test01_Dom4J.class.getClassLoader().getResourceAsStream("person.xml"); //创建SaxReader SAXReader saxReader = new SAXReader(); Document document = saxReader.read(inputStream); //获取根标签 Element rootElement = document.getRootElement(); //获取根标签下的所有子标签 List<Element> elements = rootElement.elements(); //遍历 for (Element beanElement : elements) { String id = beanElement.attributeValue("id"); String className = beanElement.attributeValue("className"); System.out.println(id+"..."+className); List<Element> elements1 = beanElement.elements(); //遍历 for (Element element : elements1) { String name = element.attributeValue("name"); String value = element.attributeValue("value"); //获取文本 String text = element.getText(); System.out.println(name+".."+value+".."+text); } } } }

    十四.使用xpath查找xml中的内容代码实现

    创建student.xml <?xml version="1.0" encoding="UTF-8" ?> <students> <student number="heima_0001"> <name id="itcast"> <xing></xing> <ming></ming> </name> <age>18</age> <sex>nan</sex> </student> <student number="heima_0002"> <name>jack</name> <age>18</age> <sex>nv</sex> </student> </students> public class Demo01_Xpath { public static void main(String[] args)throws Exception { //获取xml对应的字节流 InputStream inputStream = Demo01_Xpath.class.getClassLoader().getResourceAsStream("student.xml"); //创建SaxReader SAXReader saxReader = new SAXReader(); //将流对象读到内存中,得到Document对象 Document document = saxReader.read(inputStream); //获取根标签 Element rootElement = document.getRootElement(); //获取所有的age List<Node> list = rootElement.selectNodes("/students/student/age"); System.out.println(list); //获取标签sex,xpath最常用的一个形式 //sex //List<Node> nodes = rootElement.selectNodes("//sex"); //获取第一个sex //Node node = rootElement.selectSingleNode("//sex"); //获取第一个sex标签中的文本 Element element = (Element) rootElement.selectSingleNode("//sex"); System.out.println(element.getText()); //获取标签是name,属性是id,有这个属性就行 List<Node> list1 = rootElement.selectNodes("//name[@id]"); System.out.println(list1.size()); } }
    Processed: 0.008, SQL: 9