xml

xml的创建以及文档声明

创建方式1:
直接创建file,取名为xxx.xml

创建方式2:
配置模板:setting->搜索template->new->添加xml模板

注意:在xml文档中的第一行写上文档声明
<?xml version="1.0" encoding="UTF-8" ?>

xml的注释

快捷键:ctrl+/

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

<?xml version="1.0" encoding="UTF-8" ?>
<student>
    <user>用户</user>
    <name>
        <age>
            <sex>基本内容</sex>
        </age>
    </name>
</student>

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

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

xml中的转义字符
用到自己去查.
xml中的xml文档约束
虽然,我们xml中的标签可以随便写,但是我们开发中不能随便写;因为我们是团队开发,如果每个人都按照自己喜欢的标签去写,那么最后我们项目整合的时候,就会出现问题,所以,我们开发 编写xml是需要约束的
常见的xml约束:dtd schema
xml根据DTD约束编写xml文档
DTD约束阅读
各部分解释:
DOCTYPE:文档类型
beans:根标签
SYSTEM:本地系统文件
“bean.dtd”:产生关系的文件名,写文件的路径
bean*:可以写多个bean标签
(bean*,import*):,表示标签顺序
#PCDATA:此标签体中应该是文本
CDATA:代表的是标签中的属性值为字符型
#REQUIRED:属性值必须设置

直接粘贴dtd文件,粘贴一以下代码:

<?xml version="1.0" encoding="UTF-8"?>
<!--
  教学实例文档。
  模拟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="1"></property>
        <property name="taoge" value="1"></property>
    </bean>
    <bean id="001" className="name"></bean>
    <import resource="path"></import>
    <import resource="path"></import>
</beans>

schema约束介绍
Schema是新的xml文档约束
Schema要比DTD强大很多,是DTD代替者
Schema本身也是xml文档,但是Schema文档的扩展名为.xsd
Schema功能更强大,数据类型更完善
Schema支持名称空间
xml根据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>

dom4j解析器的核心API介绍
xml利用dom4j解析xml文档代码实现

<?xml version="1.0" encoding="UTF-8" ?>
<beans>
    <bean id="001" className="cn.itcast.demo.User">
        <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>
public class Demo01Dom4j {
    public static void main(String[] args)throws Exception {
       /* 1.核心类:SaxReader
        方法: Document read(绑定这个xml文件的输入流)->读取xml的
        返回的就是document对象*/
        SAXReader sr = new SAXReader();
        FileInputStream fis = new FileInputStream("day18\\demo02_xml\\bean.xml");

        Document document = sr.read(fis);

        /*2.Document对象:
        方法:Element getRootElement()->获取根标签*/

        Element rootElement = document.getRootElement();//beans

       /* 3.Element对象:
        方法:List<Element> elements()->获取根标签下的所有子标签(不包含孙子标签)
        String attributeValue(String 属性名)->根据属性名获取对应的属性值
        String getText()->获取的是标签体的文本部分*/
        List<Element> elements = rootElement.elements();//两个bean标签

        //4.遍历集合,将两个子标签bean遍历出来,分别获取里面的属性值
        for (Element element : elements) {//element代表List集合中的每一个bean标签
            String id = element.attributeValue("id");
            String className = element.attributeValue("className");
            System.out.println(id+"..."+className);


            List<Element> elements1 = element.elements();//每一个bean标签下的子标签property

            //5.遍历List集合,将每一个property标签获取出来
            for (Element elementProperty : elements1) {
                //获取property标签下的属性值以及文本部分
                String name = elementProperty.attributeValue("name");
                String value = elementProperty.attributeValue("value");
                String text = elementProperty.getText();
                System.out.println(name+"..."+value+"..."+text);
            }

            System.out.println("=================================");

        }
    }
}

XPath解析XML

  • XPath 是一门在 XML、html 文档中查找信息的语言。
  • XPath 是一个 W3C 标准,可通过W3CSchool文档查阅语法
    xpath作用:可以对xml和html文档中快速查找指定的信息,快速获取到指定的元素
    由于DOM4J在解析XML时只能一层一层解析,所以当XML文件层数过多时使用会很不方便,结合XPATH就可以直接获取到某个元素
    使用dom4j支持xpath具体操作
    默认的情况下,dom4j不支持xpath,如果想要在dom4j里面使用xpath,需要引入支持xpath的jar包 jaxen-1.1.6.jar
所以,我们想使用xpath解析,就要先导入dom4j的jar包,然后再导入xpath的jar包

在dom4j里面提供了两个方法,用来支持xpath(Element中的方法)`

List<Node> selectNodes("xpath表达式"),用来获取多个标签
           selectNodes("//BBB")-->获取名字为BBB的标签
    
Node selectSingleNode("xpath表达式"),用来获取第一个节点对象
     selectSingleNode("//BBB")->获取第一个BBB标签对象

xpath表达式常用查询形式
第一种查询形式

/AAA/DDD/BBB: 表示一层一层的,AAA下面 DDD下面的BBB

第二种查询形式(最常用)

//BBB: 表示和这个名称相同,表示只要标签名称是BBB 都能拿到

第三种查询形式

/*: 所有元素

第四种查询形式(没啥用)

BBB[1]:表示第一个BBB元素
BBB[last()]:表示最后一个BBB元素

第五种查询形式

//BBB[@id]: 表示只要BBB元素上面有id属性 都得到

第六种查询形式

//BBB[@id='b1'] 表示元素名称是BBB,在BBB上面有id属性,并且id的属性值是b1
创建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());
    }
}
上一篇:Canonical 开源 MicroK8 | 云原生生态周报 Vol. 25


下一篇:orz syk040424 orz chc_1235467890 (POI题目选)