<?xml version="1.0" encoding="utf-8"?>
内部DTD
<!DOCTYPE 根元素[
<!ELEMENT 元素名 (子元素+/?/*) (+:表示1次或多次,?:表示0次或1次,*:任意次)
<!ELEMENT 元素名 (#PCDATA) 只能是文本
属性 <!ATTLIST 元素名称 属性名称 属性类型 默认值 >
属性类型:CDATA 字符串类型
默认值:#REQUIRED,必须
#IMPLIED,不必须
]>
例如:
<!DOCTYPE people[
<!ELEMENT people (student*)>
<!ELEMENT student (name, age)>
<!ATTLIST student id CDATA #REQUIRED >
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
<people>
<student id="1">
<name>ok</name>
<age>12</age>
</student>
</people>
外部DTD
创建dtd文件,写法与上面一致
在xml中引入:<!DOCTYPE 根元素 SYSTEM "文件名“>
例如:<!DOCTYPE people SYSTEM "people.dtd">
dom4j
读取xml
//创建SAXReader对象
SAXReader reader = new SAXReader();
try {
//读取xml,获得document对象
Document doc = reader.read(new File("src/people.xml"));
//获取根
Element root = doc.getRootElement();
System.out.println(root.getName());
System.out.println("------------");
//获取根元素所有元素
Iterator<?> it = root.elementIterator();
while(it.hasNext()) {
Element e = (Element) it.next();
System.out.println(e.getName());
//获取id(属性)
Attribute id = e.attribute("id");
//获取student子元素
Element name = e.element("name");
Element age = e.element("age");
System.out.println(id.getName() +":"+id.getValue());
System.out.println(name.getName()+":"+name.getText());
System.out.println(age.getName()+":"+age.getText());
System.out.println("------------");
}
} catch (DocumentException e) {
e.printStackTrace();
}
写XML
Document doc = DocumentHelper.createDocument();
//添加根
Element books = doc.addElement("books");
//添加元素
Element book = books.addElement("book" );
//添加属性
book.addAttribute("id", "1");
//添加元素
Element name = book.addElement("name");
Element author = book.addElement("author");
//添加文本
name.addText("java");
author.addText("独角兽");
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = null;
try {
writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(new File("src/books.xml")),"utf-8"),format);
//writer = new XMLWriter(new FileWriter(new File("src/books.xml")), format);
writer.write(doc);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(null != writer) {
writer.close();
}
}catch (IOException e) {
e.printStackTrace();
}
}
dom4j的Xpath
要导入jaxen-1.1-beta-6.jar包
root.selectSingleNode("//name"); //获取第一个name元素
root.selectNodes("//name"); //获取所有name元素,返回list
//name--其他语句看文档