[java]代码库
/**
* dom的基本对象有5个:document,node,nodelist,element和attr
* document对象代表了整个xml的文档,所有其它的node,都以一定的顺序包含在document对象之内,排列成一个树形的结构,程序员可以通过遍历这颗树来得到xml文档的所有的内容,这也是对xml文档操作的起点。我们总是先通过解析xml源文件而得到一个document对象,然后再来执行后续的操作.
* node对象是dom结构中最为基本的对象,代表了文档树中的一个抽象的节点。在实际使用的时候,很少会真正的用到node这个对象,而是用到诸如element、attr、text等node对象的子对象来操作文档。node对象为这些对象提供了一个抽象的、公共的根。虽然在node对象中定义了对其子节点进行存取的方法,但是有一些node子对象,比如text对象,它并不存在子节点,这一点是要注意的。
* nodelist对象,顾名思义,就是代表了一个包含了一个或者多个node的列表.
* element对象代表的是xml文档中的标签元素,继承于node,亦是node的最主要的子对象。在标签中可以包含有属性,因而element对象中有存取其属性的方法,而任何node中定义的方法,也可以用在element对象上面。
* attr对象代表了某个标签中的属性。attr继承于node,但是因为attr实际上是包含在element中的,它并不能被看作是element的子对象,因而在dom中attr并不是dom树的一部分,所以node中的getparentnode(),getprevioussibling()和getnextsibling()返回的都将是null。也就是说,attr其实是被看作包含它的element对象的一部分,它并不作为dom树中单独的一个节点出现。这一点在使用的时候要同其它的node子对象相区别。
*/
public static List readXMLFile(String inFile) throws Exception {
// 得到DOM解析器的工厂实例
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = null;
try {
// 从DOM工厂获得DOM解析器
db = dbf.newDocumentBuilder();
} catch (ParserConfigurationException pce) {
System.err.println(pce);
return null;
}
Document doc = null;
try {
// 解析XML文档的输入流,得到一个Document
doc = db.parse(inFile);
// 对document对象调用normalize(),可以去掉xml文档中作为格式化内容的空白,
// 避免了这些空白映射在dom树中成为不必要的text node对象。
// 否则你得到的dom树可能并不是你所想象的那样。
// 特别是在输出的时候,这个normalize()更为有用。
doc.normalize();
} catch (DOMException dom) {
System.err.println(dom.getMessage());
return null;
} catch (IOException ioe) {
System.err.println(ioe);
return null;
}
List studentBeans = new ArrayList();
StudentBean studentBean = null;
// 得到XML文档的根节点“学生花名册”
Element root = doc.getDocumentElement();
// 取"学生"元素列表
NodeList students = root.getElementsByTagName("学生");
for (int i = 0; i < students.getLength(); i++) {
// 依次取每个"学生"元素
Element student = (Element) students.item(i);
// 创建一个学生的Bean实例
studentBean = new StudentBean();
// 取学生的性别属性
studentBean.setGender(student.getAttribute("性别"));
// 取“姓名”元素
NodeList names = student.getElementsByTagName("姓名");
if (names.getLength() == 1) {
Element e = (Element) names.item(0);
// 取姓名元素的第一个子节点,即为姓名的值节点
Text t = (Text) e.getFirstChild();
// 获取值节点的值
studentBean.setName(t.getNodeValue());
}
// 取“年龄”元素
NodeList ages = student.getElementsByTagName("年龄");
if (ages.getLength() == 1) {
Element e = (Element) ages.item(0);
Text t = (Text) e.getFirstChild();
studentBean.setAge(Integer.parseInt(t.getNodeValue()));
}
// 取“电话”元素
NodeList phones = student.getElementsByTagName("电话");
if (phones.getLength() == 1) {
Element e = (Element) phones.item(0);
Text t = (Text) e.getFirstChild();
studentBean.setPhone(t.getNodeValue());
}
// 将新建的Bean加到结果列表中
studentBeans.add(studentBean);
}
// 返回结果列表
return studentBeans;
}