[java] jsoup使用简介-汇率换算器实现-插曲2

 

[java] jsoup使用简介-汇率换算器实现-插曲2

3 解释遍历一个html文档和html字符串

传送门 http://www.open-open.com/jsoup/parsing-a-document.htm http://www.open-open.com/jsoup/parse-document-from-string.htm

原文中给出的例子如下:

String html = "<html><head><title>First parse</title></head>"
+ "<body><p>Parsed HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);

单单这个示例, 就引出了以下问题:

  1. 能够直接运行吗?
  2. 直接输出Document的结果?

3.1 运行环境设置及运行

下载jsoup.jar包, 将其放置到yourpath, 编写代码的时候具体import的内容, 应该根据jsoup的tree 进行import, 如上面的例子中使用了 JsoupDocument, 那么在文件的开头就应该有这样两句话:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

剩下的完整的内容如下:

// 再简单地将示例放入main函数中
public class JsoupDemo{
public static void main(String[] args)
throws Exception {
// Document doc = Jsoup.connect("http://en.wikipedia.org/").get();
String html = "<html><head><title>First parse</title><head>"
+ "<body><p>Parsed Html into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);
System.out.println(doc);
}
}

3.2 直接输出Document

编译运行如下(linux):

javac -classpath yourpath/jsoup.jar JsoupDemo.java
java -cp yourpath/jsoup.jar:./ JsoupDemo

最后可以发现通过parse处理后输出地结果为格式化后的html代码:

<html>
<head>
<title>First parse</title>
</head>
<body>
<p>Parsed Html into a doc.</p>
</body>
</html>

3.3 parse(String html, String baseUri)中baseUri具体指什么

如在html中出现了相对路径, 如 href="page/a.html", 那么就会被解析为 href="$baseUri/page/a.html" 如将示例进行修改为:

String html = "<html><head><title><a href=\"/page/a.html\">标题</a></title></head></html>"

然后调用:

Document doc = Jsoup.parse(html, "http://example.com/");

最后输出的doc依然和String html相同. 那么这个额外的baseUri是怎么起作用的呢. google了一下, 参见: stackoverflow中的解释 , 可见需要下述的方式才能够起作用:

for (Element link : doc.select("a")) {
System.out.println(link.absUrl("href"));
}

4 解释一个body片断

传送门 http://www.open-open.com/jsoup/parse-body-fragment.htm

Jsoup.parseBodyFragment 方法可以将字符串中的<html><head>标签忽略, 剩下的内容都为body部份. 可以将示例中的String html改为下面的方式, 并比较两者之间不同的输出结果:

String html = "<html><head><title>what</title></head><body><div><p>Lorem ipsum.</p></body></html>";

5 从一个URL, 文件加载一个Document对象

传送门 http://www.open-open.com/jsoup/load-document-from-url.htm http://www.open-open.com/jsoup/load-document-from-file.htm

通过以下尝试, 得知Jsoup在connect过程中, 已经对html文档的相应的编码方式进行了处理:

Document doc = Jsoup.connect("http://www.baidu.com/").get();
System.out.println(doc)

6 其他更多文档中的内容请参见

7 其中常用的数据结构简介

 

7.1 Element

html的element包括形如: <tag attribute="" id="" class="">text</tag> 的部份.

常用的方法有:

7.2 Elements

表示结构相同的element的集合

常用的方法:

Date: 2014-05-14 Wed

Author: Zhong Xiewei

Org version 7.8.11 with Emacs version 24

Validate XHTML 1.0

[java] jsoup使用简介-汇率换算器实现-插曲2的更多相关文章

  1. [java] 注释以及javadoc使用简介-汇率换算器的实现-插曲3

    [java] 注释以及javadoc使用简介-汇率换算器的实现-插曲3 // */ // ]]>   [java] 注释以及javadoc使用简介-汇率换算器的实现-插曲3 Table of C ...

  2. [java] 汇率换算器实现-插曲1-正则表达式(1)

    [java] 汇率换算器实现-插曲1-正则表达式(1) // */ // ]]> // */ // ]]>   [java] 汇率换算器实现-插曲1-正则表达式(1) Table of C ...

  3. [java] 更好的书写equals方法-汇率换算器的实现(4)

    [java] 更好的书写equals方法-汇率换算器的实现(4) // */ // ]]>   [java] 更好的书写equals方法-汇率换算器的实现(4) Table of Content ...

  4. [java] 汇率换算器实现(3)

    [java] 汇率换算器实现(3) // */ // ]]>   [java] 汇率换算器实现(3) Table of Contents 1 系列文章地址 2 前言 3 提取简单表单信息 3.1 ...

  5. [java] 汇率换算器实现(2)

    [java] 汇率换算器实现(2) // */ // ]]> // */ // ]]>   [java] 汇率换算器实现(2) Table of Contents 1 系列文章地址 2 前 ...

  6. [java] 汇率换算器实现(1)

    [java] 汇率换算器实现(1) // */ // ]]>   [java] 汇率换算器实现(1) Table of Contents 1 问题描述 2 类设计 3 初步实现 3.1 建立项目 ...

  7. 【菜鸟学Python】案例一:汇率换算

    汇率换算V1.0 案例描述: 设计一个汇率换算器程序,其功能是将外币换算成人民币,或者相反 案例分析: 分析问题:分析问题的计算部分: 确定问题:将问题划分为输入.处理及输出部分: 设计算法:计算部分 ...

  8. 汇率换算自然语言理解功能JAVA DEMO

    >>>>>>>>>>>>>>>>>>>>>>>> 欢迎转 ...

  9. 万航单位换算器 V1.0 绿色版

    软件名称: 万航单位换算器软件语言: 简体中文授权方式: 免费软件运行环境: Win 32位/64位软件大小: 347KB图片预览: 软件简介:万航单位换算器是一个可以随意转换单位的绿色软件,这个软件 ...

随机推荐

  1. HashSet和HapMap取distinct value

    public class TestHashSetAndHashMap { private final int setNum=5000; @Test public void doTest(){ List ...

  2. Centos普通用户提权至ROOT

    1.利用/bin/ping的漏洞普通用户提权.(rws中的s) [root@localhost ~]# ls -l /bin/ping -rwsr-xr-x. root root 9月 /bin/pi ...

  3. JDK 对应的设计模式

    一.设计模式是什么 (1)反复出现问题的解决方案 (2)增强软件的灵活性 (3)适应软件不断变化二.学习JDK中设计模式的好处 (1)借鉴优秀代码的设计,有助于提高代码设计能力 (2)JDK的设计中体 ...

  4. hander消息机制原理

    基本原理 线程中调用Handler.sendMsg()方法(参数是Message对象),将需要Main线程处理的事件 添加到Main线程的MessageQueue中,Main线程通过MainLoope ...

  5. javascript检测ActiveX插件是否安装/启用

    本文主要提供在IE浏览器下检测ActiveX插件安装/启用的状态. 在一些应用开发中,需要用到一些第三方提供的ActiveX插件,如Flash插件. 为了在未安装插件的浏览器显示友好的提示,需要用到主 ...

  6. asp.net linux 环境部署, jexus

    cd /tmpwget linuxdot.net/down/jexus-5.8.1-x64.tar.gztar -zxvf jexus-5.8.1-x64.tar.gzsudo mv jexus /u ...

  7. await之后的线程问题

    之前看了园子里的一篇文章「async & await的前世今生」,收益颇多.而其中有句话被博主特意用红色标注,所以留意多看了几眼,「await 之后不会开启新的线程(await 从来不会开启新 ...

  8. Java构建工具Ant小记(一)

    Ant简介 Ant是基于java的构建工具.理论上来说它类似与make工具,但是却克服了make的一些固有的缺陷. 传统的Make是基于操作系统shell的构建工具,虽然也可以基于工作的os对make ...

  9. 可在广域网部署运行的QQ高仿版 -- GG叽叽V1.8(源码)

    距离的GG 1.0发布已经三周了,这三周内,我利用业余时间为GG增加了视频聊天的功能.个人觉得进展有些缓慢,主要是因为大多数时间都花在了UI上.由于本人不会PS,所以图片素材都是从网上一个一个搜下来的 ...

  10. NanoProfiler - 适合生产环境的性能监控类库 之 大数据篇

    上期回顾 上一期:NanoProfiler - 适合生产环境的性能监控类库 之 基本功能篇 上次介绍了NanoProfiler的基本功能,提到,NanoProfiler实现了MiniProfiler欠 ...