DOM解析xml文件
2015-10-12 14:01
169 查看
DOM是一种用于xml文档对象模型,可用于直接访问xml文档的各个部位,在DOM中文档被模拟成树状,其中xml语法的每一个组成部分都表示一个节点,DOM允许用户遍历文档树,从父节点移动到子节点和兄弟节点,并利用某节点类型的属性(元素具有属性,文本节点具有文本数据)
节点(xml文档中的每一个成分都是一个节点)文章尾部我把代码传上来,欢迎下载。
DOM是这样规定的:
1、整个文档是一个节点文档
2、每一个xml标签是一个元素节点
3、包含在xml元素中的文本是文本结点
4、每一个xml属性是一个属性节点
本案例分成3个类
其中httpUtils.java:
public class HttpUtils {
public HttpUtils() {
// TODO Auto-generated constructor stub
}
public static InputStream getXML(String path){
InputStream inputStream = null;
try {
URL url = new URL(path);
if(url!=null){
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setConnectTimeout(3000);
connection.setDoInput(true);
connection.setRequestMethod("GET");
int code = connection.getResponseCode();
if(code==200){
inputStream = connection.getInputStream();
}
}
} catch (Exception e) {
// TODO: handle exception
}
return inputStream;
}
}
Book.java为实体类:
public class Book {
public Book() {
// TODO Auto-generated constructor stub
}
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 "Book [id=" + id + ", name=" + name + ", price=" + price + "]";
}
}
DomService.java:
public class DomService {
public List<Book> getBook(InputStream inputStream) throws Exception{
List<Book> list = new ArrayList<Book>();
//创建一个ducument解析的工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder db = factory.newDocumentBuilder();
Document document = (Document) db.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();
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
4000
if("price".equals(childNodes.item(j).getNodeName())){
book.setPrice(Float.parseFloat(childNodes.item(j).getFirstChild().getNodeValue()));
}
}
}
list.add(book);
}
return list;
}
public static void main(String[] args){
String path = "http://10.88.1.37:8080/tt/Book.xml"; //这是我用来测试的服务器地址,也就是xml文件所在的地址
InputStream inputStream = HttpUtils.getXML(path);
DomService service = new DomService();
try {
List<Book> list = service.getBook(inputStream);
for(Book book:list){
System.out.println(book.toString());
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
最后book.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<books>
<book id="1">
<name>张三</name>
<price>20</price>
</book>
<book id="2">
<name>李四</name>
<price>24</price>
</book>
</books>
节点(xml文档中的每一个成分都是一个节点)文章尾部我把代码传上来,欢迎下载。
DOM是这样规定的:
1、整个文档是一个节点文档
2、每一个xml标签是一个元素节点
3、包含在xml元素中的文本是文本结点
4、每一个xml属性是一个属性节点
本案例分成3个类
其中httpUtils.java:
public class HttpUtils {
public HttpUtils() {
// TODO Auto-generated constructor stub
}
public static InputStream getXML(String path){
InputStream inputStream = null;
try {
URL url = new URL(path);
if(url!=null){
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setConnectTimeout(3000);
connection.setDoInput(true);
connection.setRequestMethod("GET");
int code = connection.getResponseCode();
if(code==200){
inputStream = connection.getInputStream();
}
}
} catch (Exception e) {
// TODO: handle exception
}
return inputStream;
}
}
Book.java为实体类:
public class Book {
public Book() {
// TODO Auto-generated constructor stub
}
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 "Book [id=" + id + ", name=" + name + ", price=" + price + "]";
}
}
DomService.java:
public class DomService {
public List<Book> getBook(InputStream inputStream) throws Exception{
List<Book> list = new ArrayList<Book>();
//创建一个ducument解析的工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder db = factory.newDocumentBuilder();
Document document = (Document) db.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();
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
4000
if("price".equals(childNodes.item(j).getNodeName())){
book.setPrice(Float.parseFloat(childNodes.item(j).getFirstChild().getNodeValue()));
}
}
}
list.add(book);
}
return list;
}
public static void main(String[] args){
String path = "http://10.88.1.37:8080/tt/Book.xml"; //这是我用来测试的服务器地址,也就是xml文件所在的地址
InputStream inputStream = HttpUtils.getXML(path);
DomService service = new DomService();
try {
List<Book> list = service.getBook(inputStream);
for(Book book:list){
System.out.println(book.toString());
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
最后book.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<books>
<book id="1">
<name>张三</name>
<price>20</price>
</book>
<book id="2">
<name>李四</name>
<price>24</price>
</book>
</books>
相关文章推荐
- 【CF 应用开发大赛】IT Share(IT分享网)
- Android布局的小窍门?
- Web布局连载——两栏固定布局(五)
- maven使用经验集
- IT职场英语,必须学会
- 新注册
- it人员要看饮食保健养生谚语
- 样式表CSS布局经验
- 四大漏洞入侵博客
- 路由器之基本维护经验
- css网页布局中注意的几个问题小结
- DL.DT.DD实现左右的布局简单例子第1/2页
- 使用CSS框架布局的缺点和优点小结
- div+CSS网页布局的意义与副作用原因小结第1/2页
- 在Ubuntu系统上安装Ghost博客平台的教程
- CSS顶级技巧大放送,div+css布局必知
- 非常不错的MySQL优化的8条经验
- 用div实现像table一样的布局方法
- 精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)