第一次用这个DOM解析xml文件,搞了一个下午。为了搞清楚怎么读取xml的问题,查看了jdk的api也就那么回事。先看下xml文件
test.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <pets>
- <pet>
- <id>1</id>
- <name>dog</name>
- <master>jack</master>
- <love>50</love>
- </pet>
- <pet>
- <id>2</id>
- <name>cat</name>
- <master>rose</master>
- <love>70</love>
- </pet>
- </pets>
里面有四个属性,分别是宠物的id,名字,主人,爱心值。
再来个和xml对应的javabean,这样可以把东西都放到上面,然后供其他地方调用。
pet.java也是4个属性
- public class Pet {
- private int id;
- private String name;
- private String master;
- private int love;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getMaster() {
- return master;
- }
- public void setMaster(String master) {
- this.master = master;
- }
- public int getLove() {
- return love;
- }
- public void setLove(int love) {
- this.love = love;
- }
- }
这些都是次要的,最主要的是读取的方法具体看代码
- import java.io.*;
- import java.util.*;
- import javax.xml.parsers.*;
- import org.w3c.dom.*;
- public class TestXml {
- public static void main(String[] args) throws Exception {
- ReadXML rxml = new ReadXML();
- List<Pet> pets = rxml.showXML();
- for (Pet p : pets) {
- System.out
- .println(p.getMaster() + "的宠物叫:" + p.getName() + ",爱心值是:" + p.getLove() + ".");
- }
- }
- }
- class ReadXML {
- public List<Pet> showXML() throws Exception {
- // 解析工厂实例
- DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- // Dom解析器
- DocumentBuilder builder = factory.newDocumentBuilder();
- // 解析器读取文件
- Document doc = builder.parse(new File("D:\\test.xml"));
- // 获取根节点
- Element root = doc.getDocumentElement();
- NodeList nodes = root.getElementsByTagName("pet");
- List<Pet> pets = new ArrayList<Pet>();
- if (nodes != null && nodes.getLength() > 0) {
- // 循环上面查出来的pet有多少个
- for (int i = 0; i < nodes.getLength(); i++) {
- Element petElement = (Element) nodes.item(i);
- // 获取pet下面的所有节点
- NodeList nn = petElement.getChildNodes();
- Pet pet = new Pet();
- // 循环pet下面的子节点
- for (int j = 0; j < nn.getLength(); j++) {
- // 判断节点
- if (nn.item(j).getNodeType() == Node.ELEMENT_NODE) {
- if (nn.item(j).getNodeName().equals("id"))
- pet.setId(Integer.parseInt(nn.item(j).getFirstChild().getNodeValue()));
- if (nn.item(j).getNodeName().equals("name"))
- pet.setName(nn.item(j).getFirstChild().getNodeValue());
- if (nn.item(j).getNodeName().equals("love"))
- pet.setLove(Integer.parseInt(nn.item(j).getFirstChild().getNodeValue()));
- if (nn.item(j).getNodeName().equals("master"))
- pet.setMaster(nn.item(j).getFirstChild().getNodeValue());
- }
- }
- pets.add(pet);
- }
- }
- return pets;
- }
- }
由于那个test.xml是放在D盘的,所以取它的绝对路径。来看下效果图吧。
PS:Java的还有很多方法,SAX,JDOM,DOM4J都是可以的。
本文出自 “Just do it” 博客,请务必保留此出处http://davenzeng.blog.51cto.com/3896952/1168728