老样子,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. Android GradientDrawable的XML实现

     Android GradientDrawable的XML实现 Android GradientDrawable与附录文章1类似,这次以XML而非Java代码形式实现.比如写好一个shape文件放 ...

  2. 【区间筛】2017多校训练四 HDU6069 Counting Divisors

    http://acm.hdu.edu.cn/showproblem.php?pid=6069 [题意] 给定l,r,k,求 d(n)是n的因子个数 [思路] [Accepted] #include&l ...

  3. HDU 4651 (生成函数)

    HDU 4651 Partition Problem : n的整数划分方案数.(n <= 100008) Solution : 参考资料: 五角数 欧拉函数 五边形数定理 整数划分 一份详细的题 ...

  4. 出现 Assigning the return value of new by reference is deprecated in xxxx &&“Warning: Call-time pass-by-reference has been deprecated”怎么办?

    自从php5.3,越来越多的人会遇到“Assigning the return value of new by reference is deprecated in xxxx”这样的提示,尤其是在国外 ...

  5. python学习之-- redis模块操作 LIST

    redis 模块操作之 List List 操作,在内存中按照一个name对应一个List来存储. lpush(name,values):在name对应的list中添加元素,每个新的元素都添加到列表的 ...

  6. vijos 2035 奇数偶数与绚丽多彩的数

    描述 Q先生是一个热爱学习的男孩子. 他认为一个 n 位的正整数 x 若能被称作是绚丽多彩的,一定要满足对于{1,3,5,7,9} 中任意一个奇数或者没有在 x 中出现,或者在 x 中出现了恰好奇数次 ...

  7. Java实验——输出二维数组连续二维子数组的最大和

    该算法思路,根据我博客里面一维子数组求和的思路,可以用一个新的二维数组对该二维区域的数组进行求和,例如新的二维数组的第5个位置,就代表从1到5斜对角线的块状区域的和,即1,2,4,5这4个数的和,x个 ...

  8. Javascript标准事件模型

    本文为原创,转载请注明出处: cnzt       文章:cnzt-p http://www.cnblogs.com/zt-blog/p/6676913.html 1. 分类 IE -- 冒泡型 现代 ...

  9. 我的Android Studio 优化之路

    改动keymap 改动经常使用的快捷键 代码补全(Eclipse: ALT+/) Android Studio中默认用的是Ctrl+Space, 这跟输入法切换冲突.找到Keymap->Main ...

  10. ExtJS学习-----------Ext.Object,ExtJS对javascript中的Object的扩展

    关于ExtJS对javascript中的Object的扩展.能够參考其帮助文档,文档下载地址:http://download.csdn.net/detail/z1137730824/7748893 以 ...