老样子,javabean实体类:

import java.io.*;
public class Book implements Serializable {
private int id;
private String name;
private double price; public Book(){}
public Book(int id,String name,double price){
this.id=id;
this.name=name;
this.price=price;
}
public void setId(int id){
this.id=id;
}
public void setName(String name){
this.name=name;
}
public void setPrice(double price){
this.price=price;
}
}

主要看这里:

public class DomParseService {
public List<Book> getBooks(InputStream inputStream)
throws ParserConfigurationException, SAXException, IOException {
List<Book> bookList = new ArrayList<Book>();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(inputStream);
Element documentElement = document.getDocumentElement();
System.out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
// 递归解析xml并进行原样输出
parseAll(documentElement);
System.out.println("\n");
// System.out.println(documentElement.getChildNodes().getLength());
NodeList bookNodeList = document.getElementsByTagName("book");
for (int i = 0; i < bookNodeList.getLength(); i++) {
Element element = (Element) bookNodeList.item(i);
// System.out.println(element.getChildNodes().getLength());
// System.out.println(node.getNodeType()+":"+node.getNodeName()+":"+node.getNodeValue());
Book book = new Book();
book.setId(Integer.valueOf(element.getAttribute("id")));
NodeList bookChildNodes = element.getChildNodes();
for (int j = 0; j < bookChildNodes.getLength(); j++) {
Node node = bookChildNodes.item(j);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element bookChildNode = (Element) node;
if ("name".equals(bookChildNode.getNodeName())) {
book.setName(bookChildNode.getFirstChild()
.getNodeValue());
} else if ("price".equals(bookChildNode.getNodeName())) {
book.setPrice(Double.valueOf(bookChildNode
.getFirstChild().getNodeValue()));
}
}
}
bookList.add(book);
}
// NodeList nodeList=documentElement.getChildNodes();
// for(int j=0;j<nodeList.getLength();j++){
// Node node=nodeList.item(j);
// System.out.println(node.getNodeType()+":"+node.getNodeName()+":"+node.getNodeValue());
// }
return bookList;
} public void parseAll(Element element) {
String tagName = element.getNodeName();
System.out.print("<" + tagName);
NamedNodeMap attrMap = element.getAttributes();
if (attrMap != null && attrMap.getLength() > 0) {
for (int i = 0; i < attrMap.getLength(); i++) {
Attr attr = (Attr) attrMap.item(i);
String attrName = attr.getNodeName();
String attrValue = attr.getNodeValue();
System.out.print(" " + attrName + "=\"" + attrValue + "\"");
}
}
System.out.print(">");
NodeList childNodeList = element.getChildNodes();
if (childNodeList != null && childNodeList.getLength() > 0) {
for (int j = 0; j < childNodeList.getLength(); j++) {
Node childNode = childNodeList.item(j);
if (childNode.getNodeType() == Node.ELEMENT_NODE) {
// 递归解析xml
parseAll((Element) childNode);
} else if (childNode.getNodeType() == Node.COMMENT_NODE) {
System.out.print("<!--" + childNode.getNodeValue() + "-->");
} else if (childNode.getNodeType() == Node.TEXT_NODE) {
System.out.print(childNode.getNodeValue());
}
}
}
System.out.print("</" + tagName + ">");
}
}

JUnit测试:

@Test
public void test() throws ParserConfigurationException, SAXException, IOException {
InputStream inputStream=this.getClass().getClassLoader().getResourceAsStream("xml.xml");
DomParseService dps=new DomParseService();
List<Book> bookList=dps.getBooks(inputStream);
for(Book book:bookList){
System.out.println(book);
}
}

结果输出如下:

<?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>
12:thinking in java:85.5
15:Spring in Action:39.0

DOM方式解析xml实例2的更多相关文章

  1. 用JAXP的dom方式解析XML文件

    用JAXP的dom方式解析XML文件,实现增删改查操作 dom方式解析XML原理 XML文件 <?xml version="1.0" encoding="UTF-8 ...

  2. Dom方式解析XML

    public class TestXML { public static void main(String[] args) throws SAXException, IOException { //D ...

  3. 用DOM方式解析XML

    一.用DOM方式解析XML 此例子节点结构如下: 1.获取book节点属性 (1).如果不知道节点的属性,通过 NamedNodeMap attrs = book.getAttributes(); 来 ...

  4. 在iOS 开发中用GDataXML(DOM方式)解析xml文件

    因为GDataXML的内部实现是通过DOM方式解析的,而在iOS 开发中用DOM方式解析xml文件,这个时候我们需要开启DOM,因为ios 开发中是不会自动开启的,只有在mac 开发中才自动开启的.我 ...

  5. Java-Web DOM方式解析xml文件

    XML DOM 树形结构: DOM 节点 根据 DOM,XML 文档中的每个成分都是一个节点. DOM 是这样规定的: 整个文档是一个文档节点 每个 XML 元素是一个元素节点 包含在 XML 元素中 ...

  6. Java&Xml教程(二)使用DOM方式解析XML文件

    DOM XML 解析方式是最容易理解的,它將XML文件作为Document对象读取到内存中,然后你可以轻松地遍历不同的元素和节点对象.遍历元素和节点不需要按照顺序进行. DOM解析方式适合尺寸较小的X ...

  7. Java眼中的XML--文件读取--1 应用DOM方式解析XML

    初次邂逅XML: 需要解析的XML文件: 这里有两个book子节点. 1.如何进行XML文件解析前的准备工作,另外解析先获取book节点. 这个我后来看懂了: 这个Node的ELEMENT_NODE= ...

  8. DOM方式解析XML文件实例

    books.XML文件: <?xml version="1.0" encoding="utf-8"?><bookstore>    &l ...

  9. Java DOM方式解析XML(模板)

    //创建一个DocumentBuilderFactory工厂实例 DocumentBuilderFactory DBF=DocumentBuilderFactory.newInstance(); // ...

随机推荐

  1. jenkins里跑selenium webdriver,Chrome浏览器不能打开&&unknown error: unable to discover open pages

    在windows的cmd里面执行 “python test.py”,毫无问题,浏览器正常打开,测试结果也正常. 问题: 但如果是在jenkins里,选择 “execute windows batch ...

  2. SQL server将某个字符串将按指定字符分解成子字符串(行转列)

    今天突然需要用到这样的方法,在网上找过很多,大体都写的很复杂,这个简单实用.转载自ChineseMoonGod的博客:https://www.cnblogs.com/ChineseMoonGod/p/ ...

  3. xtu read problem training A - Dividing

    A - Dividing Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Descri ...

  4. HDU-1232/NYOJ-608畅通工程,并查集模板题,,水过~~~

    畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) http://acm. ...

  5. Java 学习(4):基本数据类型,变量类型

    目录 --- 基本数据类型 --- 变量类型 基本数据类型 变量就是申请内存来存储值.也就是说,当创建变量的时候,需要在内存中申请空间. 内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用 ...

  6. android开发里跳过的坑-电源锁WakeLock不起作用

    由于个别需求,需要做一个不让系统屏常亮不休眠的APP,于是使用了电源锁,在oncreate里加了如下代码: PowerManager pm = (PowerManager) context .getS ...

  7. CERC 2014 (动态树+主席树)

    CERC 2014 Pork barrel Problem : n个点m条边有边权的无向图,有q个询问,每次询问权值在[L,R]内的边组成的最小生成树的权值和,强制在线. n <= 1000, ...

  8. React Native资料汇总

    React Native 官方文档中文版翻译 http://wiki.jikexueyuan.com/project/react-native/homepage.html REACT NATIVE开发 ...

  9. Java的对象和类

    以下内容引用自http://wiki.jikexueyuan.com/project/java/object-classes.html: 一.概述 Java是一种面向对象的语言.作为一种具有面向对象特 ...

  10. 第三方APP集成微信登陆功能详解

    授权后接口调用(UnionID) 通过code获取access_token 接口说明 通过code获取access_token的接口. 请求说明 http请求方式: GET https://api.w ...