DOM方式解析xml实例2
老样子,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的更多相关文章
- 用JAXP的dom方式解析XML文件
用JAXP的dom方式解析XML文件,实现增删改查操作 dom方式解析XML原理 XML文件 <?xml version="1.0" encoding="UTF-8 ...
- Dom方式解析XML
public class TestXML { public static void main(String[] args) throws SAXException, IOException { //D ...
- 用DOM方式解析XML
一.用DOM方式解析XML 此例子节点结构如下: 1.获取book节点属性 (1).如果不知道节点的属性,通过 NamedNodeMap attrs = book.getAttributes(); 来 ...
- 在iOS 开发中用GDataXML(DOM方式)解析xml文件
因为GDataXML的内部实现是通过DOM方式解析的,而在iOS 开发中用DOM方式解析xml文件,这个时候我们需要开启DOM,因为ios 开发中是不会自动开启的,只有在mac 开发中才自动开启的.我 ...
- Java-Web DOM方式解析xml文件
XML DOM 树形结构: DOM 节点 根据 DOM,XML 文档中的每个成分都是一个节点. DOM 是这样规定的: 整个文档是一个文档节点 每个 XML 元素是一个元素节点 包含在 XML 元素中 ...
- Java&Xml教程(二)使用DOM方式解析XML文件
DOM XML 解析方式是最容易理解的,它將XML文件作为Document对象读取到内存中,然后你可以轻松地遍历不同的元素和节点对象.遍历元素和节点不需要按照顺序进行. DOM解析方式适合尺寸较小的X ...
- Java眼中的XML--文件读取--1 应用DOM方式解析XML
初次邂逅XML: 需要解析的XML文件: 这里有两个book子节点. 1.如何进行XML文件解析前的准备工作,另外解析先获取book节点. 这个我后来看懂了: 这个Node的ELEMENT_NODE= ...
- DOM方式解析XML文件实例
books.XML文件: <?xml version="1.0" encoding="utf-8"?><bookstore> &l ...
- Java DOM方式解析XML(模板)
//创建一个DocumentBuilderFactory工厂实例 DocumentBuilderFactory DBF=DocumentBuilderFactory.newInstance(); // ...
随机推荐
- 局域网虚拟机端口映射访问apache
如果我们在虚拟机内搭建好服务器后,希望可以在局域网内的设备上都能访问到这个虚拟服务器,就可以参照以下步骤来操作.其中包括了很多遇到的坑.先说说我的环境是 宿主机:windows 8.1 虚拟机:vmw ...
- HDU 5421 Victor and String
Victor and String Time Limit: 1000ms Memory Limit: 262144KB This problem will be judged on HDU. Orig ...
- ms sql server 大批量导入
BULK INSERT 文章:BULK INSERT如何将大量数据高效地导入SQL Server 可以首先在数据库建一个表Temp_tb,这个表作为导入数据的表,然后使用bulk insert导入,导 ...
- NYOJ27水池数目,类似于FZU1008最大黑区域,简单搜索题~~~
水池数目 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 南阳理工学院校园里有一些小河和一些湖泊,现在,我们把它们通一看成水池,假设有一张我们学校的某处的地图,这个地图上 ...
- 【组合数模板】HDU 6114 Chess
http://acm.hdu.edu.cn/showproblem.php?pid=6114 [思路] 就是求C(m,n) [板] #include<iostream> #include& ...
- hdu 3940
#include<stdio.h> #include<math.h> #include<string.h> double first(double vx,doubl ...
- bzoj 1702 贪心,前缀和
[Usaco2007 Mar]Gold Balanced Lineup 平衡的队列 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 807 Solved: ...
- 积累js中的一些问题及解决方案
一.取字符串的第i位不兼容的问题 1.问题:对于字符串str来说,要获取第i位,常见的是str[i],但是在低版本的浏览器中不兼容,例如ie7. 2.解决:使用str.charAt(i); 二.使用定 ...
- 如何改变linux系统的只读文件的权限
vim 编辑可以在命令模式输入 :wq! 保存退出可以用chmod 命令修改文件权限. chmod命令是非常重要的,用于改变文件或目录的访问权限.用户用它控制文件或目录的访问权限.该命令有两种用法.一 ...
- Codeforces Round #295 D. Cubes [贪心 set map]
传送门 D. Cubes time limit per test 3 seconds memory limit per test 256 megabytes input standard input ...