[分享]jdom解析xml文档_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2187 | 回复: 0   主题: [分享]jdom解析xml文档        下一篇 
nengqiang.wang
注册用户
等级:中校
经验:1658
发帖:34
精华:0
注册:1970-1-1
状态:离线
发送短消息息给nengqiang.wang 加好友    发送短消息息给nengqiang.wang 发消息
发表于: IP:您无权察看 2016-2-1 9:58:50 | [全部帖] [楼主帖] 楼主

1  jdom解析xml文档

     JDOM是一个开源的,基于Java的库来解析XML文档,这是典型的Java开发人员友好的API。这是java的优化,它使用Java集合像列表和数组。它适用于DOM和SAX API并结合了两个中优点:低内存占用几乎和SAX一样快。当一个JDOM 解析器分析XML文档,可以灵活地得到一个树形结构,其中包含所有文档的元素,而不会影响应用程序的内存占用。JDOM提供了多种可用于检查的情况下的文件的文档的内容和结构的实用功能是良好的结构,其结构是公知的。

2  环境设置

    为了使用JDOM解析器,应该有 jdom.jar 在应用程序的类路径中。下载 jdom2.0.6.zip .

3 JDOM 类

   JDOM定义了几个Java类。以下是最常见的类:

Document - 表示整个XML文档。文档Document对象是通常被称为DOM树。

Element - 表示一个XML元素。 Element对象有方法来操作其子元素,它的文本,属性和名称空间。

Attribute 表示元素的属性。属性有方法来获取和设置属性的值。它有家长和属性类型。

Text 表示XML标记的文本。

Common 表示一个XML文档中的注释。

常见的JDOM方法

使用JDOM,还有会经常用到的几种方法:

SAXBuilder.build(xmlSource)() - 构建XML源的JDOM文档。

Document.getRootElement() - 得到XML的根元素。

Element.getName() - 获取XML节点的名称。

Element.getChildren() - 得到一个元素的所有直接子节点。

Node.getChildren(Name) - 获得具有给定名称的直接子节点。

Node.getChild(Name) - 获取使用给定名称的第一个孩子节点。

5 要解析的xml文件内容

<?xml version="1.0" encoding="UTF-8"?>  
<bookstore>  
    <book category="cooking">  
        <title>Everyday Italian</title>  
        <author>Giada De Laurentiis</author>  
        <year>2005</year>  
        <price>30.00</price>  
    </book>  
    <book category="children">  
        <title>Harry Potter</title>  
        <author>J K. Rowling</author>  
        <year>2005</year>  
        <price>29.99</price>  
    </book>  
    <book category="web">  
        <title>XQuery Kick Start</title>          
        <author>James McGovern</author>  
        <author>Per Bothner</author>  
        <author>Kurt Cagle</author>  
        <author>James Linn</author>  
        <author>Vaidyanathan Nagarajan</author>          
        <year>2003</year>  
        <price>49.99</price>  
    </book>  
    <book category="web" cover="paperback">  
        <title>Learning XML</title>  
        <author>Erik T. Ray</author>  
        <year>2003</year>  
        <price>39.95</price>  
    </book>  
</bookstore>

6 解析代码

  实体类

  Book.java

package com.wnq.sk.jdomXML01;
public class Book
{
    // 与books.xml中的节点对应
    private String category;
    private String titleLang;
    private String title;
    private String author;
    private Integer year;
    private Double price;    
    public String getCategory()
    {
        return category;
    }    
    public void setCategory(String category)
    {
        this.category = category;
    }   
    public String getTitleLang()
    {
        return titleLang;
    }    
    public void setTitleLang(String titleLang)
    {
        this.titleLang = titleLang;
    }    
    public String getTitle()
    {
        return title;
    }    
    public void setTitle(String title)
    {
        this.title = title;
    }    
    public String getAuthor()
    {
        return author;
    }    
    public void setAuthor(String author)
    {
        this.author = author;
    }    
    public Integer getYear()
    {
        return year;
    }    
    public void setYear(Integer year)
    {
        this.year = year;
    }    
    public Double getPrice()
    {
        return price;
    }    
    public void setPrice(Double price)
    {
        this.price = price;
    }
    public String toString()
    {
        return "Book [category=" + category + ", titleLang=" + titleLang + ", title=" + title + ", author=" + author
            + ", year=" + year + ", price=" + price + "]";
    }
}

解析类

JdomReadXMLFile.java

package com.wnq.sk.jdomXML01;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
/**
 * @author liandong
 */
public class JdomReadXMLFile
{
    public static void main(String[] args)
        throws Exception, Exception
    {
        List<Book> books = jdomReadXMLFile("books.xml");
        for (Book b : books)
        {
            System.out.println(b.toString());
        }
    }
    
    public static List<Book> jdomReadXMLFile(String fileName)
        throws Exception, IOException
    {
        List<Book> books = new ArrayList<Book>();
        Book book = null;
        List<Element> authorList = null;
        // 创建DocmentBulider
        SAXBuilder saxBuilder = new SAXBuilder();
        // 从文件或流创建一个文档
        Document document = saxBuilder.build(fileName);
        // 提取根元素
        Element rootElement = document.getRootElement();
        // 检查属性
        List<Element> bookElementList = rootElement.getChildren();
        // 检查子元素
        for (int i = 0; i < bookElementList.size(); i++)
        {
            book = new Book();
            authorList = new ArrayList<Element>();
            Element bookElement = bookElementList.get(i);// book节点
            // 得到book的category属性
            String category = bookElement.getAttributeValue("category");
            book.setCategory(category);
            Element titleElement = bookElement.getChild("title");
            String titleLang = titleElement.getAttributeValue("lang");
            book.setTitleLang(titleLang);
            String title = titleElement.getText();
            book.setTitle(title);
            // author 可能有多个
            authorList = bookElement.getChildren("author");
            String author = "";
            for (int j = 0; j < authorList.size(); j++)
            {
                author = author + authorList.get(j).getText() + "/";
            }
            book.setAuthor(author);
            String year = bookElement.getChild("year").getText();
            book.setYear(Integer.valueOf(year));
            String price = bookElement.getChild("price").getText();
            book.setPrice(Double.valueOf(price));
            books.add(book);
        }
        return books;
    }
    
}

解析结果:

jdom.png





人们都向往和寻找快乐,其实快乐就是一种心情,秘密隐藏于人的心中。快乐从不曾远离我们,而是我们远离了快乐。原本单纯的心,一旦复杂起来,快乐和幸福就 会远离而去,烦恼和忧愁就会随之而来。






赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论