java读取xml文件

Xml代码 
<?xml version="1.0" encoding="UTF-8"?>  
<books>  
    <book id="12">  
        <name>thinking in java</name>  
        <price>85.5</price>  
    </book>  
    <book id="15">  
        <name>Spring in Action</name>  
        <price>39.0</price>  
    </book>  
</books>  

然后结合一张图来发现dom解析时需要注意的地方



在这里当我们得到节点book时,也就是图中1所画的地方,如果我们调用它的getChildNodes()方法,大家猜猜它的子节点有几个?不包括它的孙子节点,thinking in java这种的除外,因为它是孙子节点。它总共有5个子节点,分别是图中2、3、4、5、6所示的那样。所以在解析时,一定要小心,不要忽略空白的地方。

然后看代码来解析book.xml文件

DomParseService.java

Java代码  收藏代码

import java.io.InputStream;  
import java.util.ArrayList;  
import java.util.List;  
  
import javax.xml.parsers.DocumentBuilder;  
import javax.xml.parsers.DocumentBuilderFactory;  
  
import org.w3c.dom.Document;  
import org.w3c.dom.Element;  
import org.w3c.dom.NodeList;  
import org.w3c.dom.Node;  
  
import com.xtlh.cn.entity.Book;  
  
public class DomParseService {  
    public List<Book> getBooks(InputStream inputStream) throws Exception{  
        List<Book> list = new ArrayList<Book>();  
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
        DocumentBuilder builder = factory.newDocumentBuilder();  
        Document document = builder.parse(inputStream);  
        Element element = document.getDocumentElement();  
          
        NodeList bookNodes = element.getElementsByTagName("book");  
        for(int i=0;i<bookNodes.getLength();i++){  
            Element bookElement = (Element) bookNodes.item(i);  
            Book book = new Book();  
            book.setId(Integer.parseInt(bookElement.getAttribute("id")));  
            NodeList childNodes = bookElement.getChildNodes();  
//          System.out.println("*****"+childNodes.getLength());  
            for(int j=0;j<childNodes.getLength();j++){  
                if(childNodes.item(j).getNodeType()==Node.ELEMENT_NODE){  
                    if("name".equals(childNodes.item(j).getNodeName())){  
                        book.setName(childNodes.item(j).getFirstChild().getNodeValue());  
                    }else if("price".equals(childNodes.item(j).getNodeName())){  
                        book.setPrice(Float.parseFloat(childNodes.item(j).getFirstChild().getNodeValue()));  
                    }  
                }  
            }//end for j  
            list.add(book);  
        }//end for i  
        return list;  
    }  
}  

 Book.java用来组装数据和盛放数据

public class Book {  
    private int id;  
    private String name;  
    private float price;  
    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 float getPrice() {  
        return price;  
    }  
    public void setPrice(float price) {  
        this.price = price;  
    }  
    @Override  
    public String toString(){  
        return this.id+":"+this.name+":"+this.price;  
    }  
}  

测试使用单元测试如下ParseTest.java
public class ParseTest extends TestCase{  
  
    public void testDom() throws Exception{  
        InputStream input = this.getClass().getClassLoader().getResourceAsStream("book.xml");  
        DomParseService dom = new DomParseService();  
        List<Book> books = dom.getBooks(input);  
        for(Book book : books){  
            System.out.println(book.toString());  
        }  
    }  
}  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值