htmlparser解析th标签

来源:互联网 发布:小提琴音准训练软件 编辑:程序博客网 时间:2024/05/21 17:25

我在用htmlparser解析html的过程中遇到了一个问题,例如以下html代码:

<html><head></head><body><table><tr><th>th_Item</th></tr><tr><td>td_Item</td></tr></table></body></html>

在过滤table标签的时候,只输出了td_Item,而th_Item则不见了踪影。

以下是我过滤的代码:

package xmu.zgy;import org.htmlparser.NodeFilter;import org.htmlparser.Parser;import org.htmlparser.filters.NodeClassFilter;import org.htmlparser.tags.TableColumn;import org.htmlparser.tags.TableRow;import org.htmlparser.tags.TableTag;import org.htmlparser.util.NodeList;public class ThTagDemo {// 详情访问: blog.csdn.net/zgyulongfeipublic static void main(String[] args) throws Exception {String html=""+"<html>" +"<head>" +"</head>" +"<body>" +"<table>" +"<tr><th>th_Item</th></tr>" +"<tr><td>td_Item</td></tr>" +"</table>" +"</body>" +"</html>";Parser parser = new Parser();parser.setInputHTML(html);parser.setEncoding("gbk");NodeFilter filter = new NodeClassFilter(TableTag.class);NodeList nodeList = parser.parse(filter);for(int i = 0; i < nodeList.size(); ++i){if(nodeList.elementAt(i) instanceof TableTag){TableTag tag = (TableTag) nodeList.elementAt(i);TableRow[] rows = tag.getRows();for (int j = 0; j < rows.length; ++j) {TableRow row = (TableRow) rows[j];TableColumn[] columns = row.getColumns();for (int k = 0; k < columns.length; ++k) {String info = columns[k].toPlainTextString().trim();System.out.println(info);}// end for k}// end for j}}}}


输出结果如下:

td_Item


直观上来看,在TableRow[] rows = tag.getRows();这句这里既然能够输出标签td,也应该能够输出标签th。

而事与愿违,后来找到了解决的方案,在这里记录下来。


要想输出th标签的内容,则需要rows的getHeaders方法,以下是成功的代码:

package xmu.zgy;import org.htmlparser.NodeFilter;import org.htmlparser.Parser;import org.htmlparser.filters.NodeClassFilter;import org.htmlparser.tags.TableColumn;import org.htmlparser.tags.TableHeader;import org.htmlparser.tags.TableRow;import org.htmlparser.tags.TableTag;import org.htmlparser.util.NodeList;public class ThTagDemo {// 详情访问: blog.csdn.net/zgyulongfeipublic static void main(String[] args) throws Exception {String html=""+"<html>" +"<head>" +"</head>" +"<body>" +"<table>" +"<tr><th>th_Item</th></tr>" +"<tr><td>td_Item</td></tr>" +"</table>" +"</body>" +"</html>";Parser parser = new Parser();parser.setInputHTML(html);parser.setEncoding("gbk");NodeFilter filter = new NodeClassFilter(TableTag.class);NodeList nodeList = parser.parse(filter);for(int i = 0; i < nodeList.size(); ++i){if(nodeList.elementAt(i) instanceof TableTag){TableTag tag = (TableTag) nodeList.elementAt(i);TableRow[] rows = tag.getRows();for (int j = 0; j < rows.length; ++j) {TableRow row = (TableRow) rows[j];// the reason to get headers is to parse <th> tagTableHeader[] headers = row.getHeaders();for (int k = 0; k < headers.length; ++k) { System.out.println("tag标签为:" + headers[k].getTagName()); System.out.println("标签的内容为:" + headers[k].getStringText());}TableColumn[] columns = row.getColumns();for (int k = 0; k < columns.length; ++k) {String info = columns[k].toPlainTextString().trim();System.out.println(info);}// end for k}// end for j}}}}

输出的结果为:

tag标签为:TH标签的内容为:th_Itemtd_Item


有时候不开心,就是因为理想与现实之间没有平衡,找到两者的平衡点,生活就会更加丰富多彩。


原创粉丝点击