Java 使用 XPath 提取 HTML 表格数据
要通过 XPath 提取 HTML 文本中的表格数据,可以使用 Java 的 XPath 库来实现。以下是一个示例代码,演示如何使用 Java 的 XPath 库和 HTML Parser 库来提取 HTML 文本中的表格数据。
首先,需要导入相关的库文件,包括 HTML Parser 和 Java 的 XPath 库。
import org.htmlparser.Node;
import org.htmlparser.Parser;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.tags.TableTag;
import org.htmlparser.util.NodeList;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;
接下来,可以编写一个方法来提取 HTML 文本中的表格数据。该方法接受 HTML 文本作为输入,并返回一个二维数组,其中包含了表格数据。
public String[][] extractTableData(String html) throws Exception {
// 使用 HTML Parser 库解析 HTML 文本
Parser parser = new Parser(html);
// 使用 TagNameFilter 过滤器选择表格标签
TagNameFilter filter = new TagNameFilter('table');
NodeList nodeList = parser.extractAllNodesThatMatch(filter);
// 创建 XPath 对象
XPath xpath = XPathFactory.newInstance().newXPath();
// 创建 XPath 表达式,用于选择表格的所有行和列
XPathExpression rowExpr = xpath.compile('//tr');
XPathExpression colExpr = xpath.compile('td');
// 创建二维数组,用于存储表格数据
String[][] tableData = new String[nodeList.size()][];
// 遍历表格节点
for (int i = 0; i < nodeList.size(); i++) {
TableTag table = (TableTag) nodeList.elementAt(i);
NodeList rowList = (NodeList) rowExpr.evaluate(table, XPathConstants.NODESET);
// 创建一维数组,用于存储当前行的数据
String[] rowData = new String[rowList.size()];
// 遍历行节点
for (int j = 0; j < rowList.size(); j++) {
Node row = rowList.elementAt(j);
NodeList colList = (NodeList) colExpr.evaluate(row, XPathConstants.NODESET);
// 创建 StringBuilder 对象,用于存储当前行的所有列数据
StringBuilder colData = new StringBuilder();
// 遍历列节点
for (int k = 0; k < colList.size(); k++) {
Node col = colList.elementAt(k);
colData.append(col.toPlainTextString().trim());
// 如果不是最后一列,则添加制表符
if (k < colList.size() - 1) {
colData.append(' ');
}
}
// 将当前列数据添加到当前行数据
rowData[j] = colData.toString();
}
// 将当前行数据添加到表格数据
tableData[i] = rowData;
}
return tableData;
}
使用上述方法可以提取 HTML 文本中的表格数据,并将其存储在一个二维数组中。可以根据需要进一步处理这些数据。
String html = '<table><tr><td>1</td><td>2</td></tr><tr><td>3</td><td>4</td></tr></table>';
String[][] tableData = extractTableData(html);
// 打印表格数据
for (String[] row : tableData) {
for (String col : row) {
System.out.print(col + ' ');
}
System.out.println();
}
上述代码将输出如下结果:
1 2
3 4
这是提取的 HTML 文本中的表格数据。
原文地址: https://www.cveoy.top/t/topic/qmX8 著作权归作者所有。请勿转载和采集!