ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

xml

2020-12-08 13:01:07  阅读:166  来源: 互联网

标签:xml xpath 标签 BBB 文档 属性


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
在这里插入图片描述根据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支持名称空间
在这里插入图片描述根据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介绍
在这里插入图片描述利用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());
    }
}

标签:xml,xpath,标签,BBB,文档,属性
来源: https://blog.csdn.net/Aioliafhxy/article/details/110729113

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有