2010-05-21 35 views
2

我正在使用XPATH,Java並希望從一個HTML頁面中提取一些文本。 該文本是位於一些div之間的一些空白字符之間,如&nbsp;<br>等 我希望這些被分別轉換爲'空間'和'換行'提取。 我用來提取文本的方法是Element.getTextContent(),它不尊重空格字符。getTextContent從節點與空白字符標準化

有人可以告訴我,如果有一種方法來提取文本與空白標準化 或 提取整個HTML標記下的'節點',以便我可以自己替換它。 謝謝 Nayn

+0

好問題(+1)。查看我的答案獲得完整的解決方案。 – 2010-05-21 13:46:06

回答

1

<br>不是文本內容,它是一個元素。我不確定你在找什麼。嘗試訪問元素下面的所有文本節點(記住遞歸檢查元素子元素)並調用getNodeValue();

+0

這個很簡單。問題在於,getTextContent連接了所有字符串,忽略 和
。我寫了一個小的遞歸方法,在文本之間插入空格。謝謝。 – Nayn 2010-05-21 14:35:49

1

XPath不能用字符串替換節點

簡單的XSLT轉換可以執行此任務。

例如

<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="text()"> 
    <xsl:value-of select="translate(.,'&#xA0;', ' ')"/> 
</xsl:template> 

<xsl:template match="br"> 
    <xsl:text>&#10;</xsl:text> 
</xsl:template> 
</xsl:stylesheet> 

當這種轉變是在下面的XML文檔應用:

<p>&#xA0;<br/></p> 

有用結果產生

<p> 

</p> 
+0

這對我未來的需求很有用。謝謝。 – Nayn 2010-05-21 14:36:39