以下是html文档的一个片段,我需要将其与“标题”相关联 - 例如FILE_BYTES_WRITTEN - 在第一个成功中使用text()条目。
以下xpath在python lxml中运行良好:
/td[text()='FILE_BYTES_WRITTEN']/following-sibling::td
doc片段:
<td>HDFS_BYTES_READ</td>
<td align="right">4,825</td>
<td align="right">0</td>
<td align="right">4,825</td>
</tr>
<tr>
<td>FILE_BYTES_WRITTEN</td>
<td align="right">415,881</td>
<td align="right">48,133</td>
<td align="right">464,014</td>
</tr>
<tr>
<td>HDFS_BYTES_WRITTEN</td>
<td align="right">98,580,205</td>
<td align="right">2,010</td>
<td align="right">98,582,215</td>
</tr>
但是当我尝试用Java做到这一点时,我的成功却很少。我不确定是否有任何java html解析器可以支持这个。我目前正在使用HtmlCleaner。
答案 0 :(得分:1)
您可以查看具有良好getByXPath()
功能的HtmlUnit。这是一个guiless浏览器。试着看看例子。
我用于解析的另一个最喜欢的是Jsoup
,它具有强大的select(query)
功能,可以轻松完成这些操作。查看其selector class文档。你会找到你需要的一切。
答案 1 :(得分:0)
作为序言:我确实会按照@Sage的建议来看待HtmlUnit。
与此同时:我提出了以下解决方案:
a)HtmlCleaner实际上有一个用于转换为XHtml的DomSerializer:
public static Document toXhtml(String html) throws ParserConfigurationException {
HtmlCleaner cleaner = new HtmlCleaner();
TagNode tagNode = cleaner.clean(html);
DomSerializer domSerializer = new DomSerializer(new CleanerProperties());
return domSerializer.createDOM(tagNode);
}
b)在我们拥有XHtml的时候,我们有很多选择 - 比如使用xalan ..