htmlparser解析th标签

我在用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/zgyulongfei
	public 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/zgyulongfei
	public 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> tag
					TableHeader[] 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_Item
td_Item


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


你可能感兴趣的:(htmlparser解析th标签)