来自Node的getTextContent具有空白字符规范化

时间:2010-05-21 12:20:24

标签: java xslt xpath

我正在使用XPATH,Java并希望从一个html页面中提取一些文本。 文本位于某个div下面,其间有一些空白字符,例如&nbsp; <br>等。 我希望这些在提取时分别转换为'space'和'newline'。 我用来提取文本的方法是Element.getTextContent(),它不尊重空白字符。

有人可以告诉我是否有办法用空格规范化提取文本 要么 在'Node'下提取整个html标记,以便我可以自己替换它。 谢谢 Nayn

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

&LT峰; br&GT;不是文本内容,它是一个元素。我不确定你在找什么。尝试访问元素下面的所有文本节点(记住以递归方式检查元素子元素)并调用getNodeValue();