首页 > 代码库 > XML
XML
XML(Extensible Markup Language)
可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。
作用:
1、数据存储
2、数据交换
3、作为配置文件使用
文档结构:
文档第一行是文档说明,可以省略,但是不推荐使用。(注意:版本号和编码格式的顺序不能颠倒)
<?xml version="1.0" encoding="UTF-8"?>
<xml-body>
</xml-body>
注意书写格式:
1、XML文件的第一行必须是xml声明
2、XML文件只能有一个根元素(如上面代码的<xml-body></xml-body>)
3、元素要正确嵌套。
4、区分字符的大小写。
5、属性值的设置必须要被""包围起来。
6、文档中的一些实体字符。(<--< >:>)
7、原样输出:<![CDATA[要输出的内容]]>
DTD(Document Type Definition)
文档类型定义(约束),是一套为了进行程序间的数据交换而建立的关于标记符的语法规则。
内部约束:(注意空格)
1、ELEMENT: 元素节点
2、ATT:attribute 属性
3、#REQUIRD:必填项
4、CDATA:(char data)字符数据(字符串)
5、#PCDATA:(parse char data)解析字符数据
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE student[
<!ELEMENT students (student?)>
<!ELEMENT student (name,age,score)>
<!ATTLIST student id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT score (#PCDATA)>
]>
<students>
<student id = "1404010901">
<name>Jack</name>
<age>18</age>
<score>98</score>
</student>
</students>
外部约束:
XML代码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE student SYSTEM "student.dtd">
<students>
<student id = "1404010901">
<name>Jack</name>
<age>18</age>
<score>98</score>
</student>
</students>
DTD代码:
<!ELEMENT students (student?)>
<!ELEMENT student (name,age,score)>
<!ATTLIST student id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT score (#PCDATA)>
XML解析
1、DOM:基于DOM结构树
2、SAX:基于事件
3、JDOM:java dom
4、DOM4J:dom for java
对出初学Java来说主要了解下DOM4J
DOM4J的使用方法及步骤:
1、在相对应的project中导入相关的jar包(dom4j-1.6.1.jar)。
2、创建SAXReader对象,用于读取xml文件。
3、读取xml文件。
4、获取根节点。
5、读取子元素。
6、……
Java代码:
package com.bjsxt.test;
import java.io.File;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class TestStu2 {
public static void main(String[] args) throws DocumentException {
//1.创建SAXReader对象 (用于读取xml文件)
SAXReader saxReader = new SAXReader();
//2.读取xml文件
Document document = saxReader.read(new File("students2.xml"));
//3.获取根节点<students></students>
Element stusEle = document.getRootElement();
//4.读取子元素
Iterator<Element> it1 = stusEle.elementIterator();
while(it1.hasNext()){
//获取到每个student元素 <student></student>
Element stuEle = it1.next();
List<Attribute> idAttrs = stuEle.attributes();
for(Attribute att : idAttrs){
String aname = att.getName();
String atext = att.getText();
System.out.println("属性名:"+aname+"====>"+atext);
}
//获取student元素的子节点
Iterator<Element> it2 = stuEle.elementIterator();
while(it2.hasNext()){
// name age score
Element nasEle = it2.next();
System.out.println("元素名称:"+nasEle.getName()+"====>"+nasEle.getText());
}
}
}
}
XML代码:
<?xml version="1.0" encoding="utf-8"?>
<students>
<student id="1404010901">
<name>张三</name>
<age>18</age>
<score>98</score>
</student>
<student id="1404010902">
<name>李四</name>
<age>19</age>
<score>88</score>
</student>
</students>
XML