/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str="<p>供应t1紫<a href='http://www.cncu.cn' target='_blank'>铜</a>板、<a href='http://www.cncu.cn/product/tjthj_ct_zt/' target='_blank'>紫铜</a>带,质量很优质,欢迎新老客户前来采购。</p><p><a href='http://www.cncu.cn/product/tjthj_qt/ ' target='_blank'>紫铜带</a>用途:高纯度,组织细密,含氧量极低。无气孔、沙眼、疏松,导电性能极佳,电蚀出的模具表面精度高,经热处理工艺,电极无方向性,适合精打,细打,具有良好的热电道性、加工性、延展性、防蚀性及耐候性等。有良好的导电、导热、耐蚀和加工性能,可以焊接和钎焊 的<br /></p>";
//System.out.println(processContentTest(str));
//String str="<p>供应t1紫<a href='http://www.cncu.cn' target='_blank'>铜</a>";
System.out.println("--------------------------------");
System.out.println(RemoveImgAcontent(str));
}
public static String RemoveImgAcontent(String initcontent){
Pattern p = Pattern.compile("</?(A|a)(\n|.)*?>");
//Document doc = Jsoup.parseBodyFragment(initcontent); // or Jsoup.parse(...);
Document doc = Jsoup.parseBodyFragment(initcontent);
Elements images = doc.select("img");
for(Element image : images){
String altStr=image.attr("alt");
Matcher m1 = p.matcher(altStr);
altStr = m1.replaceAll("");
//image.removeAttr("alt");
image.attr("alt", altStr);
String titleStr=image.attr("title");
Matcher m2 = p.matcher(titleStr);
titleStr = m2.replaceAll("");
//image.removeAttr("title");
image.attr("title", titleStr);
}
String endcontent=doc.select("body").html();
return endcontent;
}
如上例所示 默认解析后生成的内容 中会加上/n符号
看图 做对比
解析前
解析后:
看到没多了一个 /n
查看jsoup的源码 调试后发现 是
package org.jsoup.nodes;
....
void outerHtmlHead(StringBuilder accum, int depth, Document.OutputSettings out) {
String html = Entities.escape(getWholeText(), out);
if (out.prettyPrint() && parent() instanceof Element && !Element.preserveWhitespace((Element) parent())) {
html = normaliseWhitespace(html);
}
if (out.prettyPrint() && ((siblingIndex() == 0 && parentNode instanceof Element && ((Element) parentNode).tag().formatAsBlock() && !isBlank()) || (out.outline() && siblingNodes().size()>0 && !isBlank()) ))
indent(accum, depth, out);
accum.append(html);
}
源码中 该方法里的indent方法
/**
*
* @param accum
* @param depth
* @param out
*/
protected void indent(StringBuilder accum, int depth, Document.OutputSettings out) {
accum.append("\n").append(StringUtil.padding(depth * out.indentAmount()));
}
就是这个方法加的
看了 他的逻辑
if (out.prettyPrint() && ((siblingIndex() == 0 && parentNode instanceof Element && ((Element) parentNode).tag().formatAsBlock() && !isBlank()) || (out.outline() && siblingNodes().size()>0 && !isBlank()) ))
out.prettyPrint() 应该是是否格式化 ,看了她的方法发现默认就是true的,
siblingIndex() 大概意思是 判断是否根节点之类的 意思
parentNode instanceof Element 大概是判断是否符合element格式
!isBlank()是判断不等于空
几个条件都是true 加起来就进入了 调用indent方法
要想不让jsoup默认给我的字符串加入 /n
我的解决办法是 直接注释 indet方法的实现 让它变成一个空壳方法
这个不是很完美,但是能解决问题
最完美的方案是 能够重写 该indent方法
可惜我还不清楚如何重写
顺便说下 我是从官网 把jsoup的源码下载下来解压到项目进行研究
这是jsoup官网 源码包下载地址 :http://jsoup.org/download
- 大小: 42.6 KB
- 大小: 71.7 KB
分享到:
相关推荐
- **解析文档**:调用`get()`方法获取HTML字符串,然后使用`Jsoup.parse(html)`解析为`Document`对象。 - **选择元素**:使用CSS选择器选择文档中的元素,如`doc.select("selector")`。 - **操作元素**:获取元素...
自学jsoup编程,写的第一个抓取程序,参考了一些网络的资料,有些很有用, 向原作者致谢! 打包时将最新版的jsoup包和jsoup源码包都打进去了,下载解压后和程序放在同一目录马上就能运行。 使用对象: 需要懂一点...
jsoup在java代码中高效解析html字符串为dom结构,并可实现对dom结构的灵活操作,特别适合移动端返回字段为html形式的解析过滤处理
在进行Web抓取或网页解析时,我们常常会遇到Jsoup解析结果与浏览器显示内容不一致的情况。这主要是由于服务器端根据不同的用户代理(User-Agent)来判断访问者使用的设备类型,从而提供相应的页面版本。例如,如果你...
Jsoup是一款Java库,它为了解析、提取以及操作HTML提供了强大的工具。在Web开发中,我们常常需要处理各种HTML文档,比如抓取网页数据、自动化测试或是构建爬虫。Jsoup以浏览器的方式解析HTML,使得我们可以方便地...
- **官网地址**:[http://www.open-open.com/jsoup/](http://www.open-open.com/jsoup/) - **Cookbook**:官方提供的指南详细介绍了jsoup的使用方法。 #### 四、入门教程 ##### 1. 解析和遍历HTML文档 解析HTML...
Jsoup是一款非常强大的Java库,专门用于处理HTML文档,提供了丰富的API来抓取、解析、修改和输出HTML内容。在Java开发中,如果你需要从网页上提取数据或者进行Web抓取,Jsoup是一个理想的选择。这个压缩包文件“用...
HttpClient和Jsoup是Java开发中常用的两个库,用于网络数据采集和HTML解析。HttpClient提供了强大的HTTP客户端服务,而Jsoup则是一个优秀的库,用于处理和理解HTML文档结构。本篇文章将深入探讨这两个库的使用方法...
Jsoup是一款强大的Java库,专为处理HTML文档而设计,同时也支持XML解析。它提供了简单易用的API,使得开发者可以方便地抓取、解析、修改以及清理HTML内容。Jsoup能够模拟浏览器的行为,理解HTML文档的结构,并通过...
Jsoup是一款非常强大的Java库,专门用于处理HTML和XML文档,提供了一系列简洁的API来抓取、解析、修改以及格式化这些文档。在现代Web开发中,数据抓取和网页解析是常见需求,Jsoup凭借其高效且易用的特性,成为...
用java+jsoup解析api本地帮助文档的一些实例,实测java1.6 html格式的API可用(对于一个学习java已有N年,但却一直停留在“曾经学过”的阶段人来说,java确实有其难处,类库相对较多。我最初设计目的是想要解析帮助...
Java HTML解析工具Jsoup是一个强大的库,专门设计用于处理HTML文档,提取和操作数据。它提供了类似于DOM、CSS以及jQuery的API,使得在Java中处理HTML变得简单易行。Jsoup能够连接到网页,下载HTML内容,然后进行解析...
jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。 Jsoup的主要功能 1)从一个URL,文件或字符串中...
1. **HTML解析**:jsoup能够解析HTML字符串或从URL加载页面,将HTML转换为一个复杂的DOM结构,就像浏览器所做的那样。这个DOM可以被用来遍历和查找元素,或者进行进一步的操作。 2. **DOM操作**:jsoup提供了类似于...
本文主要讲述如何利用Java编程语言中的Jsoup库和HttpClient工具包来获取和解析动态生成的数据,特别是那些通过JavaScript动态加载的数据。 ### Java爬虫基础 Java爬虫是指使用Java语言编写的一类程序,这些程序...
使用`Jsoup.parse()`方法解析HTML字符串,得到一个`Document`对象,表示整个HTML文档的结构: ```java Document document = Jsoup.parse(htmlContent); ``` 3. **选择和操作HTML元素** `jsoup`提供了丰富的...
jsoup的核心类是`org.jsoup.Jsoup`,它提供了从字符串、URL或文件加载HTML或XML文档的方法。例如,要解析XML文件,我们可以使用`Jsoup.parse()`方法,传入XML文件的路径: ```java import org.jsoup.Jsoup; import ...
1. **解析HTML**:`Jsoup.parse(String html)`方法用于从字符串解析HTML,`Jsoup.parse(String url, String charset)`则可以从URL获取HTML并解析。 2. **选择元素**:`select(String selector)`方法是jsoup的核心,...
1. **HTML解析**:jsoup能够解析HTML文档,无论是从一个URL加载还是直接提供HTML字符串。它使用了最新的HTML5规范,可以处理不规范的HTML代码,确保在解析过程中保持数据的完整性。 2. **DOM操作**:jsoup提供了...
Jsoup是一款Java库,它为了解析、提取以及操作HTML提供了强大的功能。在Android开发中,Jsoup尤其有用,因为它能够帮助开发者从网页中提取结构化数据,这对于网络爬虫或者任何需要从网页获取信息的应用来说是至关...