Java Dom解析xml
Dom解析是将xml文件全部载入,组装成一颗dom树,然后通过节点以及节点之间的关系来解析xml文件,下面结合这个xml文件来进行dom解析。
- <?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
- 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());
- }
- }
- }
Java Dom解析xml的更多相关文章
- 精讲 org.w3c.dom(java dom)解析XML文档
org.w3c.dom(java dom)解析XML文档 位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效果可能会 ...
- org.w3c.dom(java dom)解析XML文档
位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效果可能会不理想 首先来了解点Java DOM 的 API:1.解析 ...
- JAVA中使用DOM解析XML文件
XML是一种方便快捷高效的数据保存传输的格式,在JSON广泛使用之前,XML是服务器和客户端之间数据传输的主要方式.因此,需要使用各种方式,解析服务器传送过来的信息,以供使用者查看. JAVA作为一种 ...
- Java从零开始学四十二(DOM解析XML)
一.DOM解析XML xml文件 favorite.xml <?xml version="1.0" encoding="UTF-8" standalone ...
- Java解析XML文档(简单实例)——dom解析xml
一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object ...
- POPTEST老李分享DOM解析XML之java
POPTEST老李分享DOM解析XML之java Java提供了两种XML解析器:树型解释器DOM(Document Object Model,文档对象模型),和流机制解析器SAX(Simple ...
- Java解析XML文档——dom解析xml
一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object M ...
- Android之DOM解析XML
一.DOM解析方法介绍 DOM是基于树形结构的节点或信息片段的集合,允许开发人员使用DOM API遍历XML树,检索所需数据.分析该结构通常需要加载整个文档和构造树形结构,然后才可以检索和更新节点信息 ...
- 简单谈谈dom解析xml和html
前言 文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.html,xml都是基于这个模型构造的.这也是一个W3C推出的标准.j ...
随机推荐
- 合并多个Redis dump.rdb 到一个rdb的多个database
公司的服务器上运行了多个redis,现在希望合并到一个redis,用上redis的多database特性. 在网上找了一圈发现没有比较好的工具可以进行这个处理. 看过一个redis-dump号称可以导 ...
- 1.2 linear SVM 推导
1.将公式中的distance具体化 将$w_0$单独抽出作为$b$,$w=(w_1,...,w_n),x=(x_1,...,x_n)$ 则分割平面为:$w^Tx+b=0$ A.证明w为法向量 ...
- linux centos 配置 svn 服务器
首先介绍一下吧,Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的数据. 这些数据放置在一个中央资料档案库 (repository) 中. ...
- AndroidUI 视图动画-移动动画效果 (TranslateAnimation)
移动动画效果可以使用 TranslateAnimation; <Button android:id="@+id/btnTranslate1" android:layout_w ...
- Magento布局layout.xml文件详解
解析顺序 布局xml文件一般位于app/design/{area}/{package}/{theme}/layout/目录下.Layout文件一般包含block.reference.action三种标 ...
- C#中dynamic的正确用法【转】
dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你 ...
- POJ3253 Fence Repair(贪心)
分割木板的顺序是自由的,所以每次选择两块最短的板,组合在一起,增加队列,原来两个板出队,直到队列中为空或者仅仅剩下一个板时结束.这里使用优先队列较为方便. #include<iostream&g ...
- mantis 中文统计报表乱码问题解决办法
mantis 中文报表乱码问题 1.安装mantisTB 1.2.17:a.安装插件:管理-->插件管理-->安装MantisGraph(Mantis图表 1.0) 插件b.修改配置文件: ...
- ##DAY3 自定义视图、视图控制器、视图控制器指定视图、loadView、 viewDidLoad、MVC、屏幕旋转、内存警告
##DAY3 自定义视图.视图控制器.视图控制器指定视图.loadView. viewDidLoad.MVC.屏幕旋转.内存警告 #pragma mark ———————自定义视图的步骤 —————— ...
- java 多线程学习(一)
public class ThreadA extends Thread { ; public ThreadA() { super("ThreadID:" + (++threadID ...