Java 解析html报告文件
我正在尝试提取由某个工具生成的html文件的文本内容。 我不能使用普通的sax或dom解析器,因为html格式不正确 所以我试着使用HTMLPasser 现在如何提取所需的节点 我使用了下面的代码,但它不读取节点文本内容。它只打印带有属性的tds。如何获取节点正文Java 解析html报告文件,java,html,xml,Java,Html,Xml,我正在尝试提取由某个工具生成的html文件的文本内容。 我不能使用普通的sax或dom解析器,因为html格式不正确 所以我试着使用HTMLPasser 现在如何提取所需的节点 我使用了下面的代码,但它不读取节点文本内容。它只打印带有属性的tds。如何获取节点正文 td colspan="2" td valign="top" class="titleText" 我想提取有数字和%符号的主体 String inputHTML = readFileAsString(filePath); Parse
td colspan="2"
td valign="top" class="titleText"
我想提取有数字和%符号的主体
String inputHTML = readFileAsString(filePath);
Parser parser = new Parser();
parser.setInputHTML(inputHTML);
parser.setEncoding("UTF-8");
NodeList nl = parser.parse(null);
NodeList tds = nl.extractAllNodesThatMatch(new TagNameFilter("td"),true);
for(int i= 0; i < tds.size(); i++) {
Node node = tds.elementAt(i);
System.out.println(node.getText());
}
如果是HTML,像Jsoup这样的HTML解析库可以处理HTML和所有可能的不好的东西。如果您阅读该库的JavaDocs,您将看到getText应该返回您所看到的内容: 我会试着给孩子们打电话;看起来其中一个子节点将是TextNode,它应该包含您要查找的文本。看到和 完全未经测试猜测这将如何工作:
for(int i= 0; i < tds.size(); i++) {
Node node = tds.elementAt(i);
System.out.println(node.getChildren().elementAt(0).getText());
}
当然,您需要首先确保getChildren.elementAt0存在
用于清理代码
构造DOM解析器
使用XPath提取所需的数据
清理html的示例代码
private Document clean(String content) throws ParserConfigurationException {
HtmlCleaner cleaner = new HtmlCleaner();
TagNode rootNode = cleaner.clean(content);
// convert to DOM
CleanerProperties properties = new CleanerProperties();
properties.setOmitComments(true);
DomSerializer domSerializer = new DomSerializer(properties);
Document doc = domSerializer.createDOM(rootNode);
return doc;
}
现在您有了DOM文档,因此不需要构建DOM解析器
Element root = doc.getDocumentElement();
XPath xpath = XPathFactory.newInstance().newXPath();
可以找到XPath文档。
e、 g
获取根节点中任何位置的所有视图节点,其has和属性名为name,值为viewName
不将任何内容作为最后一个属性传递或传递XPathConstants.STRING会给出匹配节点的内容。dom解析器可以轻松提取,但会出现异常,因为html格式不好。某些结束标记会丢失这些标记,这不是问题,、如果标记也未关闭,dom可以进行分析,,如果没有welformed也没有问题获取数据什么不起作用?你有错误吗?如果没有,发生了什么?
NodeList columns = (NodeList) xpath.evaluate("//view[@name=\"" + viewName + "\"]/column", root, XPathConstants.NODESET);