2010-05-21 66 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