XML
一、XML简介:
- 1.是一种标记语言
- 2.xml是一种非常灵活的语言,没有固定的标签,所有标签都可以自定义
- 3.xml用于信息的记录和传递,经常用于配置文件
二、XML格式:
- 1.声明信息,用于描述xml的版本和编码方式 <?xml version="1.0" encoding="UTF-8"?>
- 2.有且仅有一个根元素
- 3.大小写敏感
- 4.标签是成对的,而且要正确嵌套
- 5.属性值要使用双引号
- 6.注释 <!-- -->
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!-- 这里是注释 --> 3 4 <books> 5 6 <book id="b01"> 7 <name>java高级编程</name> 8 <author>李四</author> 9 </book> 10 <book id="b02"> 11 <name>java中级编程</name> 12 <author>王二</author> 13 </book> 14 15 </books>
DTD
一、简介:
- 1.DTD,document Type Definition ,文档类型定义
- 2.DTD,用于约束xml的文档格式,保证xml是一个有效的
- 3.DTD分为两种,内部、外部
二、内部DTD使用:
- 1.内部DTD定义:<! DOCTYPE 根元素 [元素声明]>
- 2.元素声明语法:<!ELEMENT 元素名 (子元素[,子元素....])>
- 3.数量词:
+ : 表示出现1次或多次,至少一次
? :表示出现0次或1次
* :表示出现任意次
- 4.属性声明语法: <!ATTLIST 元素名称 属性名称 属性类型 默认值>
属性类型: CDATA ,表示字符数据(character data)
默认值 :
-- #REQUIRED , 表示必须出现
-- #IMPLIED ,表示不是必须的
三、带DTD格式的完整XML
<?xml version="1.0" encoding="UTF-8"?> <!-- 声明内部DTD --> <!DOCTYPE scores [ <!ELEMENT scores (student*) > <!ELEMENT student (name, course)> <!ATTLIST student id CDATA #REQUIRED> <!ELEMENT name (#PCDATA)> <!ELEMENT course (#PCDATA)> ]> <scores> <student id="1"> <name>张三</name> <course>java</course> </student> <student id="2"> <name>王二</name> <course>sql</course> </student> <student id="3"> <name>李四</name> <course>xml</course> </student> </scores>
四、外部DTD使用:
1.创建一个独立的DTD文件
<?xml version="1.0" encoding="UTF-8"?> <!ELEMENT scores (student*) > <!ELEMENT student (name, course)> <!ATTLIST student id CDATA #REQUIRED> <!ELEMENT name (#PCDATA)> <!ELEMENT course (#PCDATA)>
2.在xml中引入外部DTD文件
<!-- 引入外部DTD文件 --> <!DOCTYPE scores SYSTEM "scores.dtd">
XML解析
一、XML的解析:
对xml文件进行操作,包括创建xml,对xml文件进行增删改查操作
- 1.DOM解析:是官方提供的解析方式 , 基于xml树解析的 ;比较耗资源,适用于次访问XML
- 2.SAX解析:民间解析方式, 基于事件的解析;适用于数据量较大的XML
- 3.JDOM解析:第三方提供,开源免费解析方式,比DOM解析快
- 4.DOM4J解析:第三方提供,开源免费,JDOM升级版
二、DOM4J解析XML
/** * 解析xml文件 * @author Administrator * */ public class TestXml { public static void main(String[] args) throws Exception { //1.创建SAXReader对象,用于读取xml文件 SAXReader reader = new SAXReader(); //2.读取xml文件,得到Document对象 Document doc = reader.read(new File("src/scores.xml")); //3.获取根元素 Element root = doc.getRootElement(); //4.获取根元素下所有子元素 Iterator<Element> it = root.elementIterator(); while(it.hasNext()) { //取出元素 Element e = it.next(); System.out.println(e.getName()); //获取id属性 Attribute id = e.attribute("id"); System.out.println(id.getName()+"="+id.getValue()); //获取子元素 Element name = e.element("name"); Element course = e.element("course"); //打印 System.out.println(name.getName()+"="+name.getStringValue()); System.out.println(course.getName()+"="+course.getText()); System.out.println("------------"); } } }
三、生成XML文件:
/** * 生成xml文件 * @author Administrator * */ public class TestXml2 { public static void main(String[] args) throws Exception { //1.通过DocumentHelper生成一个Document对象 Document doc = DocumentHelper.createDocument(); //2.添加并得到根元素 Element root = doc.addElement("books"); //3.为根元素添加子元素 Element book = root.addElement("book"); //4.为book元素添加属性 book.addAttribute("id", "1"); //5.为book添加子元素 Element name = book.addElement("name"); Element author = book.addElement("author"); //6.为元素添加文本 name.addText("java高级"); author.addText("张三"); //7.输入 OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter writer = new XMLWriter(new FileWriter(new File("src/book2.xml")),format); writer.write(doc); //释放资源 writer.close(); } }