支持XPath Axes的Java Html Parser?

时间:2013-10-22 18:32:22

标签: java xpath axes

以下是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。

2 个答案:

答案 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 ..