Spring

Xml

Xml是eXtendsible markup language的简称:是一种可扩展的标记语言,标签是可以自定义的.

xml语法严格区分大小写

一.Xml的作用:

**1.**可以保存数据
**2.**可以用来做配置文件(重要也是核心)
**3.**数据传输的载体(现在一般用JSON)
**4.**根本目的是描述数据的

**Xml的定义:**就是文件名后缀为.xml
xml文档结构是一个倒转树形结构

二.xml的文档声明:

3种文档声明:
**version:**解析这个xml的时候,是使用什么版本的解析器解析
**encoding:**是使用什么编码格式去解析,使用的时候如果没选择正确就会出现乱码. 为了通用建议写:utf-8
**standalone:**no是指该文档会依赖关联其它文档
yes是指这是一个独立的文档

<?xml version="1.0"?>
<?xml version="1.0" encoding="UTF-8"?>//第一行必须这么写
<?xml version="1.0" encoding="UTF-8" standalone="no"?>

格式:

<?xml version="1.0" encoding="utf-8" standalone="no"?>

<stu>
<name>张三</name>
</stu>

电脑上的文件在保存的时候并不是真正的存储文字,而是存储这些文字对应的二进制.

三.xml元素定义(标签):

**1.**其实就是里面的标签,<>括起来的都叫元素.成对出现的.例如:

**2.**文档声明下的第一个元素叫做根元素或根标签.

**3.**标签里面可以嵌套标签.

**4.**空标签()即是开始也是结束.

**5.**标签名字可以自定义.

**6.**xml命名规则(命名尽量简单,做到见名知义):

四.XML 元素必须遵循以下命名规则:

1.名称可以含字母、数字以及其他的字符
2.名称不能以数字或者标点符号开始
3.名称不能以字符 “xml”(或者 XML、Xml)开始
4.名称不能包含空格
5.可使用任何名称,没有保留的字词。

五.xml简单元素和复杂元素:

<stus>
<stu>
这就代表一个学生(姓名等在这里面写)
</stu>
</stus>

1.简单元素:

元素里面包含了普通的文字

2.复杂元素:

元素里面可以嵌套其它的元素

六.xml属性定义:

定义在元素的里面,<元素名称 属性名称 = “属性的值”></元素名称>

<stus>
	<stu id="1">
		<name>张三</name>
		<age>18</age>
	</stu>
	<stu id="2">
		<name>李四</name>
		<age>28</age>
	</stu>
</stus>

七.xml的注释:

与html一样
xml的注释,不允许放置在文档的第一行.必须在文档声明的下面.

八CDATA:

1.非法字符:

在 XML 中,只有字符 “<” 和 “&” 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。

如果某段字符串里面有过的的字符,并且里面包含了类似标签或者关键字的这种文字,不想让xml的解析器去解析.那么可以使用CDATA来包装.不过这个CDATA一般比较少看见.通常在服务器给客服端返回数据的时候才能看见.

九.xml解析:

**1.作用:**规定哪些标签可以出现,属性及元素标签出现的顺序等等.

2.针对这两种解析方式的API:

其实就是获取元素里面的字符数据或者属性数据.

十.xml解析方式(面试常问的):

有很多中,但是常用的有两种

DOM:(document object model)将整个xml文档读取到内存当中,形成树状结构,然后整个文档称之为Attribute对象.所有的元素节点对应Element对象,文本也可以称之为Text对象,以上所有对象都可以称之为Node节点.

SAX:(Simplement API Xml基于事件驱动:读取一行解析一行.)

十一.xml约束:

是编写xml的规则.

一些组织或者公司,针对以上两种解析方式,给出的解决方案有哪些?

jaxp: sun公司的,比较繁琐.
jdom
dom4j: 使用比较广泛

十二.xml入门代码实现:

1.基本用法:
**element.element(“stu”)?*返回该元素下的第一个stu元素
**element.elements(“stu”)?*返回该元素下的所有子元素
需要导入jar包 deom4j-1.6.1.jar.
1.创建SaxReader对象
2.指定解析的xml
3.获取根元素
4.根据根元素获取子元素或者下面的子孙元素

package com.itheima.demo1;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.util.List;

public class MainTest {
public static void main(String[] args) {
try {
//1.创建sax读取对象
SAXReader reader = new SAXReader();
//2.指定解析的xml源
Document read = reader.read(new File(“day26/src/com/itheima/demo2/stus.xml”));
//3.的到元素
//得到根元素
Element rootElement = read.getRootElement();

        //rootElement.element("stue")获取根元素下面的子元素
        //System.out.println(rootElement.element("stue").element("age").getText());//getStringValue()也可以改为getText()也能拿到里面的元素.

        //获取根元素下面的所有子元素
        List<Element> elements = rootElement.elements();
        System.out.println(elements.size());//2个元素
        //遍历所有的stu元素
        for (Element element : elements){
            System.out.println(element.getName());//2个子元素

            //获取stu元素下面的所有元素
            String name = element.element("name").getText();
            String age = element.element("age").getText();
            System.out.println(name+" "+age);
        }

    } catch (Exception e) {
        e.printStackTrace();
    }

}

}

Dom4j 的 Xpath使用
一.dom4j里面支持Xpath的写法.xpath其实是xml的路径语言,支持我们在解析xml的时候,能够快速的定位到具体的某一个元素.

1.添加jar包依赖.
jaxen-1.1-beta-6.jar

2.在查找指定节点的时候,根据XPath语句规则来查找.

3.后续的代码与以前的解析代码一样.
package com.itheima.demo2;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.util.List;

public class XpathTest {
public static void main(String[] args) {
try {
//1.创建sax读取对象
SAXReader reader = new SAXReader();
//2.指定解析的xml源
Document read = reader.read(new File(“day26/src/com/itheima/demo2/stus.xml”));
//3.的到元素
//得到根元素
Element rootElement = read.getRootElement();

        //要想使用Xpath,还得添加支持的jar  获取的是第一个  只返回一个.
        Element nameElement = (Element) rootElement.selectSingleNode("//name");
        System.out.println(nameElement.getText());

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

        List<Element> list = rootElement.selectNodes("//name");//一定要加//不然打印不到元素
        for (Element element : list){
            System.out.println(element.getText());
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值