0

以下是我需要将“标题”(例如 FILE_BYTES_WRITTEN)与第一个成功的 text() 条目相关联的 html 文档片段。

以下 xpath 在 python lxml 中效果很好:

/td[text()='FILE_BYTES_WRITTEN']/following-sibling::td

文档片段:

   <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。

4

2 回答 2

1

您可以查看具有很好功能的HtmlUnit 。getByXPath()这是一个朴实无华的浏览器。尝试查看示例。

我用于解析和最喜欢的另一个是Jsoup它具有强大的select(query)功能,可以轻松地完成这些事情。查看它的 选择器类文档。你会找到你需要的一切。

于 2013-10-22T19:23:36.190 回答
0

作为序言:我确实会按照@Sage 的建议查看 HtmlUnit。

同时:我想出了以下解决方案:

a) HtmlCleaner 实际上有一个 DomSerializer 用于转换为 XHtml:

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

于 2013-10-22T20:14:53.023 回答