首先要下载JDOM.jar包,下载地址:http://download.csdn.net/detail/ww6055/8880371

下载到JDOM.jar包之后导入到工程中去。

实例程序:

books.xml文件:(注:books.xml文件在src/res文件夹下)

Book.java实体类:

public class Book {
    private String id;
    private String name;
    private String price;
    private String author;
    private String year;
    private String language;
    public String getLanguage() {
        return language;
    }
    public void setLanguage(String language) {
        this.language = language;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPrice() {
        return price;
    }
    public void setPrice(String price) {
        this.price = price;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
    public String getYear() {
        return year;
    }
    public void setYear(String year) {
        this.year = year;
    }
}

SAXTest.java类实现对books.xml文件的解析(注:文件中需要导入的AttributeDocumentElementJDOMException都是JDOM包下的):

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import com.xml.Jdom.model.Book;

public class JdomTest {

 //对books.xml文件进行JDOM解析
    public static void main(String[] args) {
        List<Book> booklist = new ArrayList<Book>();
        //STEP1.创建一个SAXBuilder对象
        SAXBuilder sBuilder = new SAXBuilder();
        InputStream in;
        try {
            //STEP2.创建一个输入流,将xml文件加载到输入流中
            in= new FileInputStream("src/res/books.xml");
            //进一步包装成InputStreamReader对象,处理乱码现象
            InputStreamReader isr = new InputStreamReader(in,"utf-8");
            //STEP3.通过SAXBuilder对象的build方法,将输入流加载到saxBuilder中
            Document doc=sBuilder.build(isr);
            //STEP4.通过Document对象可以获取bookstore的根节点
            Element ele = doc.getRootElement();
            //STEP5.获取根节点下的子节点的集合
            List<Element> bookList = ele.getChildren();
            //继续解析
            for(Element book:bookList){
                System.out.println("============开始解析第"+(bookList.indexOf(book)+1)+"本书===============");
                Book b = new Book();
                //如果一直输姓名则可以直接获取属性值:System.out.println(book.getAttributeValue("id"));
                //book下所有的属性
                List<Attribute> attrList=book.getAttributes();
                for(Attribute attr:attrList){
                    System.out.println("属性名是:"+attr.getName()+" ***** 属性值是:"+attr.getValue());
                    if(attr.getName().equals("id"))
                        b.setId(attr.getValue());
                }
                List<Element> list = book.getChildren();
                for(Element element:list){
                    System.out.println("节点名:"+element.getName()+" *******  节点值:"+element.getValue());
                    if(element.getName().equals("name"))
                        b.setName(element.getValue());
                    if(element.getName().equals("author"))
                        b.setAuthor(element.getValue());
                    if(element.getName().equals("year"))
                        b.setYear(element.getValue());
                    if(element.getName().equals("price"))
                        b.setPrice(element.getValue());
                    if(element.getName().equals("language"))
                        b.setLanguage(element.getValue());
                }
                booklist.add(b);
                b=null;//把Book对象设置为空,防止出现属性设置现象
            //    System.out.println(book.getAttributes());
            //    System.out.println("节点值是:"+book.getValue());
                System.out.println("============结束解析第"+(bookList.indexOf(book)+1)+"本书===============");
                
            }
            System.out.println(booklist.get(0).getName()+"****"+booklist.get(1).getName());
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (JDOMException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

JDOM方法实现对XML文件的解析的更多相关文章

  1. 【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】

    一.简介 1.使用XPath可以快速精确定位指定的节点,以实现对XML文件的CRUD操作. 2.去网上下载一个“XPath帮助文档”,以便于查看语法等详细信息,最好是那种有很多实例的那种. 3.学习X ...

  2. linux下使用libxml2实现对xml文件的读取及查询

    由于项目需要,这两天在用C++做XML文件解析的工作.在linux下有个很方便的操作xml文件的库——libxml2,它提供了一套创建和查询xml文件的C语言的接口.这篇博客主要介绍如何使用libxm ...

  3. 用DOM4J包实现对xml文件按属性分离。

    转自本人博客:http://www.xgezhang.com/dom4j_xml_separata.html dom4j是一个Java的XML API.类似于jdom.用来读写XML文件的. dom4 ...

  4. asp.net 实现对xml文件的 读取,添加,删除,修改

    用于修改站内xml文件 已知有一个XML文件(bookstore.xml)如下:<?xml version="1.0" encoding="gb2312" ...

  5. 使用jq的ajax实现对xml文件的读取

    之前一直在用json来传递数据,但是xml也是不可缺少的,于是开始了xml的征程.xml的一些属性啊之类的在菜鸟教程上列举的已经很详细了,但是却没有前段部分的获取教程,查询资料,遂懂: index.x ...

  6. Android平台中实现对XML的三种解析方式

    本文介绍在Android平台中实现对XML的三种解析方式. XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能. 在 ...

  7. 【文件处理】xml 文件 SAX解析

    SAX的全称是Simple APIs for XML,也即XML简单应用程序接口. 与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式. 当使用SAX分析器对XML文档 ...

  8. 【文件处理】xml 文件 DOM解析

    一.Java解析xml.解析xml四种方法.DOM.SAX.JDOM.DOM4j.XPath 此文针对其中的DOM方法具体展开介绍及代码分析 sax.dom是两种对xml文档进行解析的方法(没有具体实 ...

  9. [置顶] Android开发之XML文件的解析

    Android系统开发之XML文件的解析 我们知道Http在网络传输中的数据组织方式有三种分别为:XML方式.HTML方式.JSON方式.其中XML为可扩展标记语言,如下: <?xml vers ...

随机推荐

  1. nyoj 236 心急的C小加

    心急的C小加 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的 ...

  2. home_work--用户登陆

    前提: 根据文本中的已有用户和密码,实现登陆的交互:在用户输入用户名后,会有一个检测用户是否被锁定的环节:如果用户三次密码输入错误,则该用户则会被添加到锁定文件中,无法登陆. 涉及到的知识点: 1.p ...

  3. 曾经的pc端项目踩到的一些兼容性的坑及其解决方案

    曾经公司pc端项目一直最低兼容到IE7,要求和chrome下浏览效果一致,真心坑坏了我和另外一个小伙伴(另一个小伙伴以前也没处理过兼容问题).不过还好,在这里真心感谢鑫哥博客的详解,从底层原理讲到了具 ...

  4. Azure 云服务中的实例端点

    Azure云服务(cloud Servive)中有三种端点类型(endpoint type):输入端点(input);内部端点(internal);实例端点(InstanceInput) 1.输入端点 ...

  5. 【新闻】超灵敏MRI技术:照亮人体肺部

    人口健康直接影响到一个国家的经济发展和社会进步.据我国2013年发布的肿瘤发病率统计年报表明,肺癌是我国目前首位恶性肿瘤,是癌症死亡的头号杀手,目前城市中每4名死亡的癌症患者中,约有1名是肺癌.如何开 ...

  6. JS 函数调用

    Js函数调用的方式有如下几种情况: (1)具名函数直接调用 function foo() { } foo(); (2)匿名函数通过引用来调用 fooRef = function() { } fooRe ...

  7. squid3.0 隐藏 hearder 设置

    原文地址: http://www.wenzizone.cn/?p=311 squid2.6可以使用header_access来控制显示与隐藏http的header信息,但是在squid3.0版本中这个 ...

  8. 关于java.util.Properties读取中文乱码的正确解决方案(不要再用native2ascii.exe了)

    从Spring框架流行后,几乎根本不用自己写解析配置文件的代码了,但近日一个基础项目(实在是太基础,不能用硕大繁琐的Spring), 碰到了用java.util.Properties读取中文内容(UT ...

  9. C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部【转载】

    这是最近在做的一个项目中提到的需求,把一个现有的窗体应用程序界面嵌入到自己开发的窗体中来,看起来就像自己开发的一样(实际上……跟自己开发的还是有一点点区别的,就是内嵌程序和宿主程序的窗口激活状态问题) ...

  10. android127 zhihuibeijing 屏幕适配

    ## 屏幕适配 ## 加载不同分辨率的图片是根据手机的像素来加载不同分辨率文件夹下的图片. > 先在主流屏幕来发: *(分辨率和手机屏幕大小无关), 遵循原则: 不用AbsoluteLayout ...