1) XML--可扩展标记语言eXtensible Markup Language
2) 由W3C组织发布,目前推荐遵守的是W3C组织于2000年发布的XML1.0规范
3) XML的使命,就是以一个统一的格式,组织有关系的数据,为不同平台下的应用程序服务
4) XML用来传输和存储数据,HTML用来显示数据
5) XML没有预定义标签,均为自定义标签
xml用途
1) 配置文件
JavaWeb中的web.xml
C3P0中的c3p0-config.xml
2) 数据交换格式
Ajax
WebService
3) 数据存储
保存关系型数据
4)
xml基本语法
1) XML文档组成
① XML声明
version属性指定XML版本,固定值是1.0
encoding指定的字符集,是告诉解析器使用什么字符集进行解码,而编码是由文本 编辑器决定的
② CDATA区
当XML文档中需要写一些程序代码、SQL语句或其他不希望XML解析器进行解析 的内容时,就可以写在CDATA区中
XML解析器会将CDATA区中的内容原封不动的输出
CDATA区的定义格式:<![CDATA[…]]>
2) 语法规则
① XML声明要么不写,要写就写在第一行,并且前面没有任何其他字符
② 只能有一个根标签
③ 标签必须正确结束
④ 标签不能交叉嵌
⑤ 严格区分大小写
⑥ 属性必须有值,且必须加引号
⑦ 标签不能以数字开头
⑧ 注释不能嵌套
xml解析
1) XML解析是指通过解析器读取XML文档,解释语法,并将文档转化成对象
2) 常用的解析方式
DOM(Document Object Model)
SAX(Simple API for XML)
3) DOM 和SAX解析的对比
//1.创建解析器对象 SAXReader saxReader = new SAXReader(); //2.解析xml文件获取document对象 Document document = saxReader.read("students.xml"); //3.得到根元素 Element root = document.getRootElement();
<?xml version="1.0" encoding="UTF-8"?> <students> <!-- 根标记 --> <student> <id>1001</id> <name>Tom</name> <gender>男</gender> </student> <student> <id>1002</id> <name>Jerry</name> <gender>女</gender> </student> <class> <class-name>com.atguigu.login.beans.Employee</class-name> </class> </students>
package com.atguigu.login.test; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.junit.Test; import com.atguigu.login.beans.Employee; public class TestXml { @Test public void test() throws Exception { // dom 解析 //创建解析器对象 SAXReader reader = new SAXReader(); //把一个xml文件解析成 dom数 Document dom = reader.read("students.xml"); System.out.println("dom:" + dom ); //获取根节点 Element root = dom.getRootElement(); // List<Element> els = root.elements(); // for (Element element : els) { // System.out.println(element.elementText("name") ); // } Element cls = root.element("class"); Element clsName = cls.element("class-name"); System.out.println("clsName:" + clsName); String clsStr = clsName.getText(); System.out.println("clsStr:" + clsStr); Employee emp = (Employee)Class.forName(clsStr).newInstance(); System.out.println(emp); } }