XML:eXtensible Markup Language 可扩展标记语言
XML与Html比较
XML | Html | |
设计宗旨 | 存储与传输数据 | 显示数据 |
标签 | 自定义 | 预定义 |
语法 | 严格 | 松散 |
XML乱码相关问题
原因:存储XML的文件的编码格式与XML文件第一行中声明的<?xml version="1.0" encoding="编码" ?>不相符,导致XML错误。
分析:存储XML的文件的编码格式是XML文件的实际编码类型,而文件声明的encoding是告诉打开它的应用程序,要用我指定的编码方式进行解码,故出错。
解决方法:encoding改为文件的编码,或者改变文件的编码即可。
疑问:你可能想如果我不指定的encoding呢?
答案:如果未指定encoding,打开XML的应用程序将会两种情况打开:
1 按照文件的编码打开(最好不过了)
2 按照应用程序的默认编码打开,比如有些浏览器按照默认UTF-8打开。
启示:XML文件必须加上encoding,这样万无一失。
XML约束
目前,XML约束分为2类,dtd,和schema。
dtd:缺点不能准确限制数据类型。
dtd分类:
* 内部dtd:在xml内部定义dtd
* 外部dtd:在外部文件中定义dtd
* 本地dtd文件:<!DOCTYPE students SYSTEM "student.dtd">
* 网络dtd文件:<!DOCTYPE students PUBLIC "名称空间" "student.dtd">
dtd详情请见菜鸟教程:http://www.runoob.com/dtd/dtd-tutorial.html
schema:
导入xsd约束文档:
1、编写根标签
2、引入实例名称空间 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3、引入名称空间 xsi:schemaLocation="http://www.itcast.cn/xml student.xsd"
4、引入默认的名称空间
schema详情请见菜鸟教程:http://www.runoob.com/schema/schema-tutorial.html
看到这里,不知道做Java EE的同学认出了,这是JavaEE项目中web.xml开头那段总是TMD看不懂的代码。那里采用的就是schema约束。
XML解析
xml解析思想:
* DOM解析:将文档加载进内存,形成一颗dom树(document对象),将文档的各个组成部分封装为一些对象。
* 优点:因为,在内存中会形成dom树,可以对dom树进行增删改查。
* 缺点:dom树非常占内存,解析速度慢。
* SAX解析:逐行读取,基于事件驱动
* 优点:不占内存,速度快
* 缺点:只能读取,不能回写
xml常用的解析器:
* DOM4J:
1.导入jar包 dom4j.jar,最新为dom4j-1.6.1.jar
2.创建解析器
SAXReader reader = new SAXReader();
3.解析xml 获得document对象
Document document = reader.read(url);
* XPATH:专门用于查询
* 定义了一种规则。
* 使用的方法:
* selectSingleNode():
* selectNodes():
使用步骤:
1、注意:要导包dom4j-1.6.1.jar和jaxen-1.1-beta-6.jar两个包。
2、创建解析器
SAXReader reader = new SAXReader();
3、解析xml 获得document对象
Document document = reader.read(url);