如何用htmlparser修改html中标签的内容

问题描述

刚接触htmlparser,想用htmlparser解析字符串测试文本一<input name="text1" type="text" value="text1">测试文本二Stirng sText="测试文本一<input name="&amp;quot;text1&quot;/" type="&amp;quot;text&quot;" value="&amp;quot;text1&quot;">测试文本二其他数据;";Parser parser = new Parser(); // parser.setURLparser.setInputHTML(sText);parser.setEncoding(parser.getEncoding());NodeFilter filter = new NodeClassFilter(Span.class);NodeList list = parser.extractAllNodesThatMatch(filter);for (int i = 0; i < list.size(); i++) { if (list.elementAt(i) instanceof Span) { Span spanTag = (Span ) list.elementAt(i);textnode.setAttributeEx(textnode.getAttributeEx("name"));       if(spanTag .getAttribute("name").equals("first")){        spanTag .setAttribute("value", "bbb");      } }} 我已经用span过滤掉了其他内容,部分源码如上,我现在想将上面文本中的标签中的name="first"的value值改为"bbb",然后返回所有文本即改过的(sText),但是不能用sText.replace()方法,因为原文本中可能有多个value="aaa"的值. 大家有什么好的建议,最好是直接可以用htmlparser处理的.谢谢问题补充:非常感谢大家的帮忙,尤其是lzj0470和ferreousbox,上面的问题已经解决,如果现在我想将字符串"测试文本一<input name="text1/" type="text" value="text1">测试文本二其他数据;"中的"测试文本二"替换成"此处已经被替换";即返回的字符串为:"测试文本一<input name="text1/" type="text" value="text1">此处已经被替换其他数据;"这样该怎么实现,因为span标签中还含有等标签,而我对正则表达式又不熟,所以,sText.replace()方法实现不了,还是要请教大家了,谢谢哈

解决方案

楼上的代码是正解,可以解决这个问题,但是返回的结果如果span元素还有parent元素的话就不正确了,当然前提是不知道要解析的html代码是什么样的,所以应该这样做:public String parse(String text) { String tmp = "<html><body>" + text + "</body></html"; NodeList list = Parser.createParser(tmp, "GB2312").parse(new TagNameFilter("body")); Node body = tmp.elementAt(0); body.accept(new NodeVisitor() { public void visitTag(Tag tag) { if (tag.getClass() != Span.clss) return; // replace attribute here,i ignore the code ...... } }); return body.toHtml();}
解决方案二:
引用非常感谢大家的帮忙,尤其是lzj0470和ferreousbox,上面的问题已经解决 楼主如果觉得好的话,应该将积分奖给最好的答案。这样才能创造更好的问答氛围
解决方案三:
/** * @param args * @throws ParserException */public static void main(String[] args) throws ParserException {// TODO Auto-generated method stubString sText="<p><span style=background-color: lime name=first value=aaa><b>测试文本一</b></span><input type=text value=text1 name=text1/><p><span style=background-color: lime name=first value=aaa>测试文本二</span>其他数据;"; String sText_new = "";Parser parser = new Parser(sText);NodeList list = parser.parse(new TagNameFilter("span"));if(list.size()>0){for(int i=0; i < list.size(); i++){Span span = (Span)list.elementAt(i);span.setAttribute("value", "bbb");}sText_new = list.toHtml();}System.out.println("sText_new="+sText_new);}结果是sText_new=<span style=background-color: lime name=first value=bbb><b>测试文本一</b></span><span style=background-color: lime name=first value=bbb>测试文本二</span>
解决方案四:
引用我已经用span过滤掉了其他内容,部分源码如上,我现在想将上面文本中的<span>标签中的name="first"的value值改为"bbb",然后返回所有文本即改过的(sText),但是不能用sText.replace()方法,因为原文本中可能有多个value="aaa"的值.这句话不是很理解楼主可以发一份你用的htmlparser.jar版本给我,或者放到你的博客上面吗?
解决方案五:
不如用用nekohtml+dom4j,因为虽然htmlparser堪称经典,但有些老了,并且也没有版本升级了。

时间: 2024-08-28 12:44:35

如何用htmlparser修改html中标签的内容的相关文章

代码-求教!jsp修改Html中标签属性为什么不能实现!

问题描述 求教!jsp修改Html中标签属性为什么不能实现! 代码: HTML: <body onload="gogo();test();"> <input type="button" class="btn btn-primary btn-block" style="display:" onclick="isWeiXin()" id="qwe" name="x

javascript-如何用JQuery修改表格中的值?

问题描述 如何用JQuery修改表格中的值? 我现在抓到了td1,我想把里面的内容修改成 "Guanyu": 下面是我写的代码,但是不好使 <html> <head> <script src="http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js"></script> </head> <body> <table id=&quo

如何用c#提取html中制定的内容???

问题描述 我想提取下面字符串中的C2009050601271,如何实现或者正则表达式怎么写谢谢!!!<TDonmouseover="this.oldcolor=this.style.backgroundColor;this.style.backgroundColor='#99ccff'"onmouseout=this.style.backgroundColor=this.oldcoloralign=middle><Ahref="http://10.45.12

脚本-如何用代码修改本地组策略的管理模板中某项的状态

问题描述 如何用代码修改本地组策略的管理模板中某项的状态 例如:我想把 ""管理模板->系统->可移动存储访问->所有可移动存储类:拒绝所有权限"" 的状态由已禁用改为已启用如何用代码实现?我之前用改注册表的方式,但必须注销或重启才能生效,可是在本地组策略编辑器(gpedit.msc)中改后是立即生效的,如何用代码做到呢?

javascript-如何用JS获取TR中TD的某个标签的值。然后根据大小,交换TR的位置

问题描述 如何用JS获取TR中TD的某个标签的值.然后根据大小,交换TR的位置 例如: <tr> <td> <h6 id="id0" name="name" > 123</h6> </td> </tr> <tr> <td> <h6 id="id1" name="name" > 456</h6> </td

JSP中标签库的深入研究

js 标签库Taglib 标签被定义和分布在一个称为标签库的结构中,一个标签库是由元信息和类组成的集合:1.标签处理器:实现定制标签功能的Java类.2.标签附加信息(TEI):向JSP容器提供边辑以确认标签属性和创建变量的类.3.标签库描述器(TLD):描述单个标签和整个标签库属性的XML文档. 标签处理器和标签附加信息需要定位在JSP容器类载入器可以找到的地方.标签库描述器可在URL指定的符意位置.JSP1.1规范要求JSP容器接受一个打包成因定结构的JAR文件的标签库.TLD必须是/MET

WPS表格怎么修改工作表标签名字

  WPS表格怎么修改工作表标签名字 1.打开我们的WPS表格,在表格的底端我们我可以看到软件默认的表格名字是是"sheet1"; 2.选中工作表,把鼠标切换到表格界面左上角的下拉按钮,在弹出的下拉菜单中选择"格式"选项组中"工作表"选项的"重命令"命令; 3.此时在鼠标光标会定位在我们的工作表的底端的标签处,在这里我们可以输入工作表的名称,例如"我的工作表"; 4.选中刚刚被命名的工作表的标签处,单击鼠标

如何用Lightroom修改白平衡?

  Lightroom软件是当下数字拍摄工作流程中不可或缺的一部分,适合专业摄影师输入.选择.修改和展示大量的数字图像的高效软件.今天小编给大家带来的是如何用Lightroom修改白平衡,下面请跟随小编一起来学习一下. 1.修改功能第一个方框为剪裁. 2.按住X可以改变是横剪裁还是竖着剪裁. 3.按住SHIFT是固定比例剪裁. 4.在剪裁时将鼠标放在图片外围,即可出现剪裁辅助线.可以改变图片倾斜的角度.(也可以在剪裁功能中找到尺子的那个键,选中以后帮助剪裁,比如横向的图片,地平线是歪的,可以点击

从零开始学_JavaScript_系列(七)——jquery(复选框及互斥、div块、修改css、标签数组、ajax连续加载)

(17)查看复选框是否被选中 复选框为: <input type="checkbox" name="yingmingliu"id="yingmingliu" value="yingmingliu"/> jq语法为: $("#yingmingliu").is(':checked') 如果选中,返回true,如果没有被选中,返回false.   查看复选框的值: $("#yingmingl