这里采用的是dom4j的解析技术。
在使用之前,必须要导入dom4j的jar包.
一、读取XML文件
dom4j的api接口 | 描述 |
Node | dom4j树中所有的节点 |
Branch | 代表能包含子节点的节点 |
Element | XML元素 |
Document | XML文档 |
Attribute | XML元素的属性 |
DocumentType | XML文档中DOCTYPE的声明 |
Text | XML文档中的内容 |
CDATA | XML文档中的CDTAT段 |
Comment | XML文档中的注释内容 |
ProcessingInstruction | XML文档中的处理指令 |
常用的API
class org.dom4j.io.SAXReader
--read,提供多种读取XML文件的方式,返回一个Document对象
interface org.dom4j.Document
--iterator,获取元素下所有的node
--getRootElement 获取根节点
interface org.dom4j.Node
--getName 获取node名字
interface org.dom4j.Element
--attributes 返回该元素的属性列表
--attributeValue 根据传入的属性名获取属性值
--elements返回包含子元素的列表
--elementIterator 返回包含子元素的迭代器
interface org.dom4j.Attribute
--getName 获取属性名
--getValue 获取属性值
1、DTD文件
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT scores(student+)>
<!ELEMENT student(name,course,score)>
<!ATTLIST student id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT course (#PCDATA)>
<!ELEMENT score (#PCDATA)>
2、需要读取的XML文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE scores SYSTEM "Stu.dtd">
<scores>
<student id="1">
<name>Luther</name>
<course>Java</course>
<score>89</score>
</student>
<student id="2">
<name>ANan</name>
<course>JAVA</course>
<score>100</score>
</student>
</scores>
3、读取XML文件
package com.luther.xml;
import java.io.File;
import java.util.Iterator;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
//读取XML文件
public class TestXMl {
public static void main(String[] args) throws DocumentException{
//创建SAXReader对象,用于读取xml文件
SAXReader reader=new SAXReader();
//读取xml文件,得到Document对象,Document就是表示的是XML文档
Document doc=reader.read(new File("src/Student.xml"));
// System.out.println(doc);
// 获取根元素
Element root=doc.getRootElement();
//获取根元素下所有 的子元素
Iterator<Element> iterator=root.elementIterator();
while(iterator.hasNext()){
//取出元素
Element element=iterator.next();
//获取ID属性
Attribute id=element.attribute("id");
System.out.println(id.getName()+"="+id.getValue());
// 获取student的子元素,根据名称来获取
Element name=element.element("name");
Element course=element.element("course");
Element score=element.element("score");
System.out.println(name.getName()+"="+name.getText());//获取元素的名称,和值,值不是使用的是getValue(),而是getText(),getStringValue()
System.out.println(course.getName()+"="+course.getText());
System.out.println(score.getName()+"="+score.getText());
}
}
}
二、写XML文件
package com.luther.xml;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import javax.sql.rowset.spi.XmlWriter;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
//形成XML文件
public class TextXML2 {
public static void main(String []args) throws IOException{
//使用DocumentHelper来生成一个Document对象
Document document =DocumentHelper.createDocument();
//添加并得到根元素,只有一个根元素
Element root=document.addElement("scores");
//为为根元素添加子元素,并得到子元素的对象
Element student = root.addElement("student");
Element addAttribute = student.addAttribute("id", "1");
Element name = student.addElement("name");
Element course = student.addElement("course");
Element score = student.addElement("score");
//设置子值
name.setText("Anan");
course.setText("art");
score.setText("100");
//格式良好的输出
OutputFormat oFormat=OutputFormat.createPrettyPrint();
XMLWriter xWriter=new XMLWriter(new FileWriter(new File("src/student1.xml")),oFormat);
xWriter.write(document);//document就代表一个XML文件,可以这么理解
xWriter.close();
}
}