用Jsoup实现html中img标签地址替换

作app的时候常常要用webview解析Html,若是是本身写的服务器那么富文本编辑框有可能选择像KindEditor这样的编辑器,在kindEditor添加图片虽然能够实现绝对路径插入,若是说:html

<img alt="" src="http://58.192.23.75:8080/xiaoxiao2/uploads/artImage/image/20130711/20130711182603_176.png" />
java

可是这样直接用绝对路径很不合理,为何?由于做为服务器,ip地址或者域名可能会有变更,若是用绝对路径的话,出现要变更ip的状况,那么原来服务器上的图片就都不能用,或者须要大量的修改,一个合理的服务器须要能灵活的适应,因此就应该使用下面的地址:node

<img alt="" src="/xiaoxiao2/uploads/artImage/image/20130711/20130711182603_176.png" />
android

这样高潮就来了,在android的webview控件里面是显示不了这样的图片的,怎么办?web

个人解决的方法就是在显示以前把img标签的src地址换成绝对地址,找了一下选择了你们很推崇的Jsoup,(下载请自行解决)api

替换代码以下:服务器

 

	String newsBody="<img alt="" src="/xiaoxiao2/uploads/artImage/image/20130711/20130711182603_176.png" />";
        public static String HTTPHOST="http://58.192.23.75:8080";
Document doc = Jsoup.parse(newsBody);
			Elements pngs = doc.select("img[src]");
			for (Element element : pngs) {
				String imgUrl = element.attr("src");
				if (imgUrl.trim().startsWith("/")) {
					imgUrl =HTTPHOST + imgUrl;
					element.attr("src", imgUrl);
				}
			}
			newsBody = doc.toString();
article_context.loadDataWithBaseURL(null, newsBody, "text/html",
"utf-8", null);

 


根据jsoup指南里面有这样一段教程:app

 

方法

 

可使用属性设置方法 Element.attr(String key, String value), 和 Elements.attr(String key, String value).编辑器

假如你须要修改一个元素的 class 属性,可使用 Element.addClass(String className) 和Element.removeClass(String className) 方法。this

Elements 提供了批量操做元素属性和class的方法,好比:要为div中的每个a元素都添加一个rel="nofollow" 可使用以下方法:

doc.select("div.comments a").attr("rel", "nofollow");

说明

Element中的其它方法同样,attr 方法也是返回当 Element (或在使用选择器是返回 Elements集合)。这样可以很方便使用方法连用的书写方式。好比:

doc.select("div.masthead").attr("title", "jsoup").addClass("round-box");

 

如需更多关于Jsoup 的用法,请访问:

http://www.open-open.com/jsoup/

相关文章
相关标签/搜索