xml的基本概念

 Xml

eXtendsible markup language 可扩展的标记语言

 XML 有什么用?

  1. 可以用来保存数据

  2. 可以用来做配置文件

  3. 数据传输载体

##定义xml

其实就是一个文件,文件的后缀为 .xml

###. 文档声明

    简单声明, version : 解析这个xml的时候,使用什么版本的解析器解析
    <?xml version="1.0" ?>
​
    encoding : 解析xml中的文字的时候,使用什么编码来翻译
    <?xml version="1.0" encoding="gbk" ?>
​
    standalone  : no - 该文档会依赖关联其他文档 ,  yes-- 这是一个独立的文档
    <?xml version="1.0" encoding="gbk" standalone="no" ?>

###encoding详解

在解析这个xml的时候,使用什么编码去解析。 ---解码。

 文字, 而是存储这些文字对应的二进制 。 那么这些文字对应的二进制到底是多少呢? 根据文件使用的编码 来得到。 

默认文件保存的时候,使用的是GBK的编码保存。

所以要想让我们的xml能够正常的显示中文,有两种解决办法

  1. 让encoding也是GBK 或者 gb2312 .

  2. 如果encoding是 utf-8 , 那么保存文件的时候也必须使用utf-8

  3. 保存的时候见到的ANSI 对应的其实是我们的本地编码 GBK。

为了通用,建议使用UTF-8编码保存,以及encoding 都是 utf-8

元素定义(标签)

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

    <stu> </stu>
  2. 文档声明下来的第一个元素叫做根元素 (根标签)

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

  4. 空标签

    既是开始也是结束。 一般配合属性来用。
    ​
    <age/>
    <stu>
        <name>张三</name>
        <age/>
    </stu>
  1. 标签可以自定义。

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

    名称可以含字母、数字以及其他的字符 
    名称不能以数字或者标点符号开始 
    名称不能以字符 “xml”(或者 XML、Xml)开始 
    名称不能包含空格 
命名尽量简单,做到见名知义

简单元素 & 复杂元素

  • 简单元素

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

  • 复杂元素

元素里面还可以嵌套其他的元素

属性的定义

定义在元素里面, <元素名称 属性名称="属性的值"></元素名称> <stus> <stu id="10086"> <name>张三</name> <age>18</age> </stu> <stu id="10087"> <name>李四</name> <age>28</age> </stu> </stus>

 

  • xml注释:

与html的注释一样。

<!-- --> 
如: 
​
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 
        //这里有两个学生
        //一个学生,名字叫张三, 年龄18岁, 学号:10086
        //另外一个学生叫李四  。。。
     -->

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

 xml解析方式

有很多种方式,常用两种。

  • DOM

  • SAX

DOM和SAX解析xml的不同

  • dom是基于内存的,把xml读到内存中,消耗很大的内存空间;
  • SAX是基于事件驱动的方式,事件被触发时,获取相应的xml数据解析
  • dom可以向xml插入数据,SAX不可以
  • dom可以随机访问,SAX不可以

DOM:document object model 把整个xml全部读取到内存,形成树状结构。整个文档称之为document对象,属性对应Attribute对象,所有的元素节点对应Element对象,文本也可以称之为Text对象,以上所有的对象都可以称之为Node节点。

 

 Dom4j 

 是一个简单、灵活的开源库,前身是 JDOM。与 JDOM 所不同的是,DOM4j 使用接口和抽象类基本方法,用了大量的 Collections 类,提供一些替代方法以允许更好的性能或更直接的编码方法。DOM4j 不仅可以读取 XML 文件,而且还可以写入 XML 文件。

基本用法

    element.element("stu") : 返回该元素下的第一个stu元素
    element.elements(); 返回该元素下的所有子元素。 

 

  1. 创建SaxReader对象

  2. 指定解析的xml

  3. 获取根元素。

  4. 根据根元素获取子元素或者下面的子孙元素

 

try {
		//1. 创建sax读取对象
		SAXReader reader = new SAXReader(); 
		//2. 指定解析的xml源
		Document  document  = reader.read(new File("D:/test.xml"));
		
		//3. 得到元素、
		//得到根元素
		Element rootElement= document.getRootElement();
		
		//获取根元素下面的子元素 age
	//rootElement.element("age") 
		//System.out.println(rootElement.element("stu").element("age").getText());
//获取根元素下面的所有子元素 。 stu元素
		List<Element> elements = rootElement.elements();
		//遍历所有的stu元素
		for (Element element : elements) {
			//获取stu元素下面的name元素
			String name = element.element("name").getText();
			String age = element.element("age").getText();
			String address = element.element("address").getText();
			System.out.println("name="+name+"==age+"+age+"==address="+address);
		}
		
	} catch (Exception e) {
		e.printStackTrace();
	}

dom4j读取某个元素的某个属性

dom4j官网

 

xml约束

DTD 

通过 DTD,您的每一个 XML 文件均可携带一个有关其自身格式的描述。

通过 DTD,独立的团体可一致地使用某个标准的 DTD 来交换数据。

而您的应用程序也可使用某个标准的 DTD 来验证从外部接收到的数据。

您还可以使用 DTD 来验证您自身的数据。

 

1.可以引用网络上的DTD

2.直接引入本地得DTD

3.直接在XML里面嵌入DTD的约束规则

Schema

其实就是一个xml , 使用xml的语法规则, xml解析器解析起来比较方便 , 是为了替代DTD 。
但是Schema 约束文本内容比DTD的内容还要多。 所以目前也没有真正意义上的替代DTD

Schema和DTD的区别

      Schema是对XML文档结构的定义和描述,其主要的作用是用来约束XML文件,并验证XML文件有效性。DTD的作用是定义XML的合法构建模块,它使用一系列的合法元素来定义文档结构。它们之间的区别有下面几点:

       1、Schema本身也是XML文档,DTD定义跟XML没有什么关系,Schema在理解和实际应用有很多的好处。

       2、DTD文档的结构是“平铺型”的,如果定义复杂的XML文档,很难把握各元素之间的嵌套关系;Schema文档结构性强,各元素之间的嵌套关系非常直观。

      3、DTD只能指定元素含有文本,不能定义元素文本的具体类型,如字符型、整型、日期型、自定义类型等。Schema在这方面比DTD强大。

      4、Schema支持元素节点顺序的描述,DTD没有提供无序情况的描述,要定义无序必需穷举排列的所有情况。Schema可以利用xs:all来表示无序的情况。

     5、对命名空间的支持。DTD无法利用XML的命名空间,Schema很好满足命名空间。并且,Schema还提供了include和import两种引用命名空间的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值