在读取XML文档之前先要写好一个xml文档,示例xml文档如下
innerdtd.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 内部声明DTD -->
<!DOCTYPE scores[
<!ELEMENT scores (student+)>
<!ELEMENT student (name,course,score)>
<!ATTLIST student id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT course (#PCDATA)>
<!ELEMENT score (#PCDATA)>
]>
<scores>
<student id="1">
<name>www</name>
<course>java</course>
<score>66</score>
</student>
<student id="2">
<name>eee</name>
<course>php</course>
<score>77</score>
</student>
</scores>
这个xml文档格式良好,一个根元素,两个子元素。
xml解读技术主要由DOM技术、SAX技术、JDOM技术、DOM4J技术,此次示例运用的是SAX。其他的技术写法与此相似,导入的jar包会不同而已。
-
首先,在eclipse中new一个class,名为
TestXml.java
-
其次,下载导入jar包,
dom4j.jar
官方下载地址如下:https://dom4j.github.io/
本人用的是
dom4j-1.6.1.jar
这个包。- 接下来编写程序,内容如下:
import java.io.File;
import java.util.Iterator;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class TestXml {
public static void main(String[] args) throws Exception{
//1. 创建SAXReader对象,用于读取xml文件
SAXReader reader = new SAXReader();
//读取xml文件,得到document对象
Document doc = reader.read(new File("src/innerdtd.xml"));
//获取根元素
Element root = doc.getRootElement();
// System.out.println(root.getName());
//获取根元素下的所有子元素
Iterator<Element> it = root.elementIterator();
//报黄或写为 : Iterator<?> it = root.elementIterator();
while(it.hasNext()){
//取出元素
Element e = (Element)it.next();
// System.out.println(e.getName());
//获取id属性
Attribute id = e.attribute("id");
System.out.println(id.getName()+ "=" + id.getValue());
//获取student的子元素
Element name = e.element("name");
Element course = e.element("course");
Element score = e.element("score");
System.out.println(name.getName()+ "=" + name.getStringValue());
System.out.println(course.getName()+ "=" + course.getText());
System.out.println(score.getName()+ "=" + score.getText());
System.out.println("----------------------------------");
}
}
}