java三方---->dom4j解析园里博客的列表

  Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。今天我们就开始Dom4j的学习。

Dom4j的使用

dom4j的使用项目结构如下:

Dom4j的下载地址:https://sourceforge.net/projects/dom4j/?source=typ_redirect

一、请求数据,并且保存到本地文件中

private static String fileName = "file/huhxDom.xml";
private static String requestUrl = "http://wcf.open.cnblogs.com/blog/u/huhx/posts/1/3";

// 将url的内容读取到本地文件夹中
public static void writeFileFromUrl(String strUrl) {
    HttpURLConnection connection = null;
    OutputStream outputStream = null;
    InputStream inputStream = null;
    try {
        URL url = new URL(strUrl);
        connection = (HttpURLConnection) url.openConnection();
        outputStream = new FileOutputStream(new File(fileName));
        connection.setConnectTimeout(8000);
        connection.setReadTimeout(8000);
        connection.setRequestMethod("GET");

        if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
            inputStream = connection.getInputStream();
            byte[] buffer = new byte[1024];
            int length;
            while ((length = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, length);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            outputStream.close();
            inputStream.close();
            connection.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

二、从本地文件中读取数据并解析:

// 解析文件,将内容取出来
public static void readFromFile() {
    SAXReader reader = new SAXReader();
    try {
        Document document = reader.read(new File(fileName));
        Element rootElement = document.getRootElement();
        // 博客logo的路径
        System.out.println("logo: " + rootElement.elementText("logo"));

        // 网页的标题
        System.out.println("title: " + rootElement.elementText("title"));

        // 发布博客数量
        System.out.println("postcount: " + rootElement.elementText("postcount"));

        // 博客作者信息
        Element authorElement = rootElement.element("author");
        System.out.println("authorName: " + authorElement.elementText("name"));
        System.out.println("authorUri: " + authorElement.elementText("uri"));
        System.out.println("-------------------------------------------------------");

        // 博客的列表,所有的entry列表
        @SuppressWarnings("unchecked")
        List<Element> entries = rootElement.elements("entry");
        for (Element entry : entries) {
            System.out.println("entryId: " + entry.elementText("id"));
            System.out.println("entryTitle: " + entry.elementText("title").replaceAll("&gt;", ">"));
            System.out.println("entrySummary: " + entry.elementTextTrim("summary"));
            System.out.println("entryLink: " + entry.element("link").attributeValue("href"));
            System.out.println("***************************************************");
        }
    } catch (DocumentException e) {
        e.printStackTrace();
    }
}

三、得到下载的xml文件huhxDom.xml内容如下:

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title type="text">博客园_huhx</title>
    <id>uuid:a0d85c23-4321-4ed6-938b-c6924edf816d;id=18947</id>
    <updated>2016-06-07T11:40:07+08:00</updated>
    <logo>http://pic.cnblogs.com/face/849920/20160316222225.png</logo>
    <author>
        <name>huhx</name>
        <uri>http://www.cnblogs.com/huhx/</uri>
    </author>
    <postcount>68</postcount>
    <entry>
        <id>5564873</id>
        <title type="text">js插件----&amp;gt;日期控件My97DataPicker的使用</title>
        <summary type="text">My97DatePicker是一个更全面,更人性化,并且速度一流的日期选择控件。具有强大的日期范围限制功能;自定义事件和丰富的API库;多语言支持和自定义皮肤支持;跨无限级框架显示和自动选择显示位置。今天我们就开始My97DatePicker的基础使用。
            日期控件My97DataPicker 一、将
        </summary>
        <published>2016-06-07T11:40:00+08:00</published>
        <updated>2016-06-07T11:16:35Z</updated>
        <author>
            <name>huhx</name>
            <uri>http://www.cnblogs.com/huhx/</uri>
        </author>
        <link rel="alternate"
            href="http://www.cnblogs.com/huhx/p/jsThirdMy97DataPicker.html" />
        <diggs>0</diggs>
        <views>7</views>
        <comments>0</comments>
    </entry>
    <entry>
        <id>5563444</id>
        <title type="text">js插件----&amp;gt;jquery通知插件toastr的使用</title>
        <summary type="text">toastr是一款非常棒的基于jquery库的非阻塞通知提示插件,toastr可设定四种通知模式:成功,出错,警告,提示,而提示窗口的位置,动画效果都可以通过能数来设置。toastr需要jquery的支持。今天我们就开始toastr的学习。
            jquery通知插件toastr的使用 一、引入jquer
        </summary>
        <published>2016-06-06T18:50:00+08:00</published>
        <updated>2016-06-07T11:16:35Z</updated>
        <author>
            <name>huhx</name>
            <uri>http://www.cnblogs.com/huhx/</uri>
        </author>
        <link rel="alternate" href="http://www.cnblogs.com/huhx/p/jsThirdToastr.html" />
        <diggs>0</diggs>
        <views>17</views>
        <comments>0</comments>
    </entry>
    <entry>
        <id>5557028</id>
        <title type="text">java三方----&amp;gt;html解析jsoup的使用</title>
        <summary type="text">jsoup 是一款 Java 的HTML
            解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操作方法来取出和操作数据。今天我们就开始jsoup的学习。
            jsoup解析html jsoup的主要功能如下: 从一个URL,文件或
        </summary>
        <published>2016-06-03T17:30:00+08:00</published>
        <updated>2016-06-07T11:16:35Z</updated>
        <author>
            <name>huhx</name>
            <uri>http://www.cnblogs.com/huhx/</uri>
        </author>
        <link rel="alternate" href="http://www.cnblogs.com/huhx/p/javaThirdJsoup.html" />
        <diggs>0</diggs>
        <views>103</views>
        <comments>0</comments>
    </entry>
</feed>

四、解析该文件,得到博客的相关信息:

logo: http://pic.cnblogs.com/face/849920/20160316222225.png
title: 博客园_huhx
postcount: 68
authorName: huhx
authorUri: http://www.cnblogs.com/huhx/
-------------------------------------------------------
entryId: 5564873
entryTitle: js插件---->日期控件My97DataPicker的使用
entrySummary: My97DatePicker是一个更全面,更人性化,并且速度一流的日期选择控件。具有强大的日期范围限制功能;自定义事件和丰富的API库;多语言支持和自定义皮肤支持;跨无限级框架显示和自动选择显示位置。今天我们就开始My97DatePicker的基础使用。 日期控件My97DataPicker 一、将
entryLink: http://www.cnblogs.com/huhx/p/jsThirdMy97DataPicker.html
***************************************************
entryId: 5563444
entryTitle: js插件---->jquery通知插件toastr的使用
entrySummary: toastr是一款非常棒的基于jquery库的非阻塞通知提示插件,toastr可设定四种通知模式:成功,出错,警告,提示,而提示窗口的位置,动画效果都可以通过能数来设置。toastr需要jquery的支持。今天我们就开始toastr的学习。 jquery通知插件toastr的使用 一、引入jquer
entryLink: http://www.cnblogs.com/huhx/p/jsThirdToastr.html
***************************************************
entryId: 5557028
entryTitle: java三方---->html解析jsoup的使用
entrySummary: jsoup 是一款 Java 的HTML 解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操作方法来取出和操作数据。今天我们就开始jsoup的学习。 jsoup解析html jsoup的主要功能如下: 从一个URL,文件或
entryLink: http://www.cnblogs.com/huhx/p/javaThirdJsoup.html
***************************************************

Dom4jTest.java文件的内容:

package com.huhx.dom4j;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class Dom4jTest {
    private static String fileName = "file/huhxDom.xml";
    private static String requestUrl = "http://wcf.open.cnblogs.com/blog/u/huhx/posts/1/3";

    // 将url的内容读取到本地文件夹中
    public static void writeFileFromUrl(String strUrl) {
        HttpURLConnection connection = null;
        OutputStream outputStream = null;
        InputStream inputStream = null;
        try {
            URL url = new URL(strUrl);
            connection = (HttpURLConnection) url.openConnection();
            outputStream = new FileOutputStream(new File(fileName));
            connection.setConnectTimeout(8000);
            connection.setReadTimeout(8000);
            connection.setRequestMethod("GET");

            if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
                inputStream = connection.getInputStream();
                byte[] buffer = new byte[1024];
                int length;
                while ((length = inputStream.read(buffer)) != -1) {
                    outputStream.write(buffer, 0, length);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                outputStream.close();
                inputStream.close();
                connection.disconnect();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    // 解析文件,将内容取出来
    public static void readFromFile() {
        SAXReader reader = new SAXReader();
        try {
            Document document = reader.read(new File(fileName));
            Element rootElement = document.getRootElement();
            // 博客logo的路径
            System.out.println("logo: " + rootElement.elementText("logo"));

            // 网页的标题
            System.out.println("title: " + rootElement.elementText("title"));

            // 发布博客数量
            System.out.println("postcount: " + rootElement.elementText("postcount"));

            // 博客作者信息
            Element authorElement = rootElement.element("author");
            System.out.println("authorName: " + authorElement.elementText("name"));
            System.out.println("authorUri: " + authorElement.elementText("uri"));
            System.out.println("-------------------------------------------------------");

            // 博客的列表
            @SuppressWarnings("unchecked")
            List<Element> entries = rootElement.elements("entry");
            for (Element entry : entries) {
                System.out.println("entryId: " + entry.elementText("id"));
                System.out.println("entryTitle: " + entry.elementText("title").replaceAll("&gt;", ">"));
                System.out.println("entrySummary: " + entry.elementTextTrim("summary"));
                System.out.println("entryLink: " + entry.element("link").attributeValue("href"));
                System.out.println("***************************************************");
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        writeFileFromUrl(requestUrl);
        readFromFile();
    }
}

对Dom4j的一些源码

以下贴出一些Dom4j的重要方法的源码。

一、elementIterator方法

public Iterator elementIterator(String name) {
    List list = elements(name);
    return list.iterator();
}

二、elementText方法

public String elementText(String name) {
    Element element = element(name);
    return (element != null) ? element.getText() : null;
}

三、attributeValue方法

public String attributeValue(String name) {
    Attribute attrib = attribute(name);

    if (attrib == null) {
        return null;
    } else {
        return attrib.getValue();
    }
}

四、element方法

public Element element(String name) {
    List list = contentList();
    int size = list.size();

    for (int i = 0; i < size; i++) {
        Object object = list.get(i);

        if (object instanceof Element) {
            Element element = (Element) object;

            if (name.equals(element.getName())) {
                return element;
            }
        }
    }
    return null;
}

五、elementTextTrim方法

public String elementTextTrim(String name) {
    Element element = element(name);
    return (element != null) ? element.getTextTrim() : null;
}

element.getTextTrim()方法的说明:

return: the trimmed text value where whitespace is trimmed and normalised into single spaces. This method does not return null.

友情链接

时间: 2024-11-10 14:43:44

java三方---->dom4j解析园里博客的列表的相关文章

Java 使用 Dom4j 解析 XML 指南

Java 使用 Dom4j 解析 XML 指南 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 解析 XMLParsing XML 首先要做的事情之一就是,可能要解析某种类型的一个 XML 文档

java使用dom4j解析xml

目标:将指定XML进行解析,以键=值的方式返回指定节点下的数据 所需要的jar包:dom4j1.6.1.jar.jaxen-1.1.jar <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://s

java基于MVC的简单博客系统

原文:java基于MVC的简单博客系统 源代码下载地址:http://www.zuidaima.com/share/1550463595760640.htm 采用技术:jsp+servlie+javaBean+mysql+ajax

【收藏用】--切勿转载JAVA 使用Dom4j 解析XML

原帖地址 : http://blog.csdn.NET/yyywyr/article/details/38359049 解析XML的方式有很多,本文介绍使用dom4j解析xml. 1.环境准备 (1)下载dom4j-1.6.1.jar (2)下载junit-4.10.jar 2.温馨提示 解析XML过程是通过获取Document对象,然后继续获取各个节点以及属性等操作,因此获取Document对象是第一步,大体说来,有三种方式: (1)自己创建Document对象   Document docu

致自己:JAVA程序猿初入博客园

克丁在某外企工作一年后,终于在博客园申请了属于自己的技术博客! 大概在所有程序猿中,克丁算是很晚才搭建自己博客的人了.好吧,事实上,克丁完全可以利用大学充分的闲余时间搭建自己的博客,但是克丁没有这么做,因为克丁是真的懒.而在克丁工作的这一年里,克丁不断地学习着新的技术.探索技术道路的过程,就像是行走在广袤的无人区,无助无趣,而且孤独. 技术越深,即越孤独. 克丁非常不喜欢这种绝对的安静,于是乎克丁需要一个载体,用它去记录下来时的路以观察自身,去看到前行者的脚步以借鉴他人,去寻找志同道合的兄弟以相

博客收藏列表

个人博客 田守枝的博客 许令波的博客 阮一峰的博客 flyne的博客 陶邦仁的博客 方腾飞的博客 技术入门 VIM入门 zookeeper简单介绍 JMS相关1.JMS相关2 原理探究 OAuth2.0介绍 RSA加密介绍 用java PreparedStatement就不用担心sql注入了吗? 许令波关于Java中文乱码的分析 问题解决 Maven工程中,Java访问resources文件夹下文件 scp ssh 不输密码 Tar 命令 RPM 命令 CentOS 编译MySql 工具 mav

2016年川师大软件工程学生博客地址列表

团队编号 团队成员 团队名称 项目名称 博客地址 1 蔡何 六小灵童 Durian http://www.cnblogs.com/compilers/ 1 陈高瑶 六小灵童 Durian http://www.cnblogs.com/ccgy/ 1 陈佳 六小灵童 Durian http://www.cnblogs.com/NMSLWSND/ 1 陈秋月 六小灵童 Durian http://www.cnblogs.com/Issing/ 1 陈晓宇 六小灵童 Durian http://www

2016年川师大软件工程本科生博客地址列表

团队编号 团队成员 团队名称 项目名称 博客地址 1 蔡何 六小灵童 Durian http://www.cnblogs.com/compilers/ 1 陈高瑶 六小灵童 Durian http://www.cnblogs.com/ccgy/ 1 陈佳 六小灵童 Durian http://www.cnblogs.com/NMSLWSND/ 1 陈秋月 六小灵童 Durian http://www.cnblogs.com/Issing/ 1 陈晓宇 六小灵童 Durian http://www

学习java的第三篇博客

java的数据类型:共十一种数据类型,根据其使用方式分为基本类型和引用类型.基本类型:byte(1字节).short(2字节).int(4字节).long(8字节).float(4字节).double(8字节).char(2字节).boolean(不确定,由JVM决定),其中byte.short.int.long为整型,float.double为浮点型,char为字符型.boolean为布尔型 引用类型:类(class).接口(interface).数组 变量:用于存储数据类型,变量必须先声明后