2013-10-22 33 views
0

以下是我需要關聯「標題」的html文檔片段 - 例如FILE_BYTES_WRITTEN - 在第一個成功的文本()條目中。支持XPath軸的Java Html Parser?

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

回答

0

作爲序言:我的確會按照@Sage的建議看待HtmlUnit。

其間:我想出了以下解決方案:

一)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例如..

1

你可以看看HtmlUnit,它有很好的getByXPath()功能。這是一個不切實際的瀏覽器。試着看看例子。

另一個我用於解析和最喜歡的是Jsoup它具有強大的功能select(query)輕鬆做到這些事情。查看其selector class文檔。你會發現你需要的一切。