Java中如何解析XML文件

来源:互联网 发布:淘宝怎么看无线端来源 编辑:程序博客网 时间:2024/05/01 07:59
Java中如何解析XML文件

xml文件:"student.xml"
xml 代码


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE zmclass SYSTEM "student.dtd">
<zmclass id="0703">
<student sex="男">
<name>MICHAEL</name>
<age>24</age>
<address>武汉</address>
</student>
<student sex="女">
<name>王黎</name>
<age>24</age>
<address>武汉</address>
</student>
<student sex="男">
<name>莫智洲</name>
<age>24</age>
<address>武汉</address>
</student>
<student sex="男">
<name>曹锋</name>
<age>23</age>
<address>武汉</address>
</student>
</zmclass>

dtd文件:"student.dtd"
python 代码


<!--
ELEMENT 元素
ATTLIST 属性
元素出现的次数:
*: 从“0”到“N”。
+: 大于等于“1”
?: 是“0”或者是“1”。
默认: 只可能是“1”。

常用属性类型:
CDATA:一般的文字。
ID:该属性在XML文件中是唯一的,常用来表示身份证。

ETC......

#REQUIRED 大写
#required 小写
表示在标记中必须出现此属性。

#IMPLIED 大写
#implied 小写
表示在标记中可以不出现的属性。

#FIX 大写
#fix 小写
表示在标记中是某个固定的值。
-->
<!ELEMENT zmclass (student+)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT address (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ATTLIST zmclass id CDATA #REQUIRED>
<!--建立“父子”关系-->
<!ELEMENT zmclass (name,address,age)>
<!ATTLIST student sex (男|女) #REQUIRED>

java文件:"DomTest.java"



package test;
/**
*
* @描述:解析XML文件的测试类。
*/
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class DomTest {
public static void main(String[] args){
List stuArrList = new ArrayList();//创建用来保存学生信息的集合。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new File("student.xml"));
Element root = doc.getDocumentElement();//得到文档对象树。
//System.out.println(root);
System.out.println("根元素名称:"+root.getTagName());
NodeList stuList = root.getElementsByTagName("student");
//开始逐个创建学生对象。
for(int i = 0; i < stuList.getLength();i++){
Student s = new Student();
Element stuE = (Element)stuList.item(i);
//System.out.println(stuE);
s.setSex(stuE.getAttribute("sex"));//向学生对象中写入性别属性。
NodeList stuInfoList = stuE.getChildNodes();
for(int j = 0;j < stuInfoList.getLength();j++){
Node temp = stuInfoList.item(j);
if(temp.getNodeType()==Node.ELEMENT_NODE){//判断对象的类型的节点是不是元素。
Element tempE = (Element)temp;//转换类型到元素。
Node initW = tempE.getLastChild();
//Node initW = tempE.getFirstChild();
//由于只有一个节点,第一和最后一个都是同一个。
if("name".equals(tempE.getNodeName())){
s.setName(initW.getNodeValue());//加入姓名。
}if("age".equals(tempE.getNodeName())){
s.setAge((Integer.parseInt(initW.getNodeValue())));//加入年龄。
}if("address".equals(tempE.getNodeName())){
s.setAddress((initW.getNodeValue()));//加入地址。
}
}
}    
原创粉丝点击