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文件的测试类。 * @作者: 赵明 * 2007-9-5 */ 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()));//加入地址。 } } } stuArrList.add(s);//添加进集合中。 } Iterator ite = stuArrList.iterator();//使用跌代器遍历集合元素。 while(ite.hasNext()){ Student s = (Student)ite.next(); System.out.println(s); } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
  java 代码 

java文件:"Student.java" 

java 代码
package test; /** * * @描述:学生类用来保存学生的信息。 * @作者: 赵明 * 2007-9-5 */ public class Student { private String name; private String sex; private int age; private String address; public String toString(){//覆盖该方法。 return name+"-"+sex+"-"+age+"-"+address; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }
   
 运行结果: 
ruby 代码
根元素名称:zmclass MICHAEL-男-24-武汉 王黎-女-24-武汉 莫智洲-男-24-武汉 曹锋-男-23-武汉
   

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值