HTMLParser 怎么获取替换后的文本

pan_java 发布于 2010/02/05 10:59
阅读 1K+
收藏 0

现在我们有一个需求就是,修改页面所有链接的href 值,然后保存这个页面

    以下是我的代码
   
   Parser myParser = new Parser();
   try {
    myParser.setInputHTML(content);
    NodeFilter textFilter = new NodeClassFilter(LinkTag.class);
    NodeList nodeList = myParser.parse(textFilter);
    for (int i = 0; i < nodeList.size(); i++) {
     Node node = nodeList.elementAt(i);
     LinkTag linkTag = (LinkTag)node;
     linkTag.setLink("http://www.163.com");
     System.out.println(linkTag.getLinkText()+"  :  "+linkTag.getLink());
     }
   } catch (Exception e) {
    log.error("parse html enode is error");
   }
   return content;
 
  但是我怎样获取我的修改href 值后的HTML内容了.
加载中
0
红薯
红薯

linkTag.toHtml();

0
p
pan_java

我要得到的是

假如我的html 是下面

<html>

  <head>test</head>

 <body>

      <a  href=http://www.163.com>

</body>

</html>

替换sina

我要得到的内容是

<html>

  <head>test</head>

 <body>

      <a  href=http://www.sina.com>

</body>

</html>

可以楼上的只能得到的是 <a href=http://www.sina.com>

我要全部的HTML内容

0
红薯
红薯

引用来自“pan_java”的帖子

我要得到的是

假如我的html 是下面

  test

      http://www.163.com>

替换sina

我要得到的内容是

  test

      http://www.sina.com>

可以楼上的只能得到的是 http://www.sina.com>

我要全部的HTML内容

给你一个OSChina中的代码:

public static String wap_filter(String content) {
	if(StringUtils.isBlank(content)) return content;
	try{
		StringBuilder filterContent = new StringBuilder();
		Parser parser = new Parser();
		parser.setEncoding("8859_1");
		parser.setInputHTML(content);
		//遍历所有的节点
		NodeList nodes = parser.extractAllNodesThatMatch(new NodeFilter(){
			public boolean accept(Node node) {
				return true;
			}});
		for(int i=0;i<nodes.size();i++){
			Node node = nodes.elementAt(i);				
			if(node instanceof LinkTag){
				LinkTag lnk = (LinkTag)node;
				if(!lnk.isEndTag() && !lnk.isJavascriptLink()){
					String href = lnk.getLink();
					filterContent.append("<a href='");
					if(href.indexOf("www.oschina.net")>0)
						href = StringUtils.replace(href, "www.oschina.net", wap.oschina.net");
					else if(href.startsWith("http://"))
						href = "/home/goweb?url="+LinkTool.encode_url(href);
					filterContent.append(href);
					filterContent.append("'>");
				}else{
					filterContent.append(lnk.toHtml());
				}
			}else if(node instanceof TextNode){
				TextNode text = (TextNode)node;
				filterContent.append(text.getText());
			}else{
				filterContent.append('<');
				filterContent.append(node.getText());
				filterContent.append('>');
			}
		}
		return filterContent.toString();
	}catch(ParserException e){
		e.printStackTrace();
	}
	return content;	
}
自己分析一下吧。

0
p
pan_java

好的,我试试谢谢!

0
p
pan_java

是可以的,谢谢

返回顶部
顶部