2010-05-21 4 views
2

Je travaille avec XPATH, Java et je veux extraire du texte d'une page html. Le texte se trouve sous une div avec des espaces entre les caractères, comme &nbsp;<br> etc. Je veux que ces éléments soient convertis en 'espace' et 'nouvelle ligne' respectivement lors de l'extraction. La méthode que j'utilise pour extraire du texte est Element.getTextContent() qui ne respecte pas les espaces.getTextContent de Nœud avec normalisation des caractères blancs

Quelqu'un pourrait-il me dire s'il y a un moyen d'extraire du texte avec la normalisation des espaces OU Extrait tout le balisage HTML sous le « nœud » pour que je puisse le remplacer par moi-même. Merci Nayn

+0

Bonne question (+1). Voir ma réponse pour une solution complète. –

Répondre

1

<br> n'est pas du contenu textuel, c'est un élément. Je ne suis pas sûr de ce que vous cherchez. Essayez simplement de visiter tous les nœuds de texte sous l'élément (n'oubliez pas de vérifier récursivement les éléments enfants) et d'appeler getNodeValue();

+0

Celui-ci était simple. Le problème était que, getTextContent concatène toutes les chaînes en ignorant   et
. J'ai écrit une petite méthode récursive qui insère des espaces entre les textes. Merci. – Nayn

1

XPath ne peut pas remplacer les noeuds avec des chaînes. Une simple transformation XSLT peut effectuer cette tâche.

Par exemple:

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

lorsque cette transformation est appliquée sur le document XML suivant:

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

le résultat recherché est produit:

<p> 

</p> 
+0

Ceci est utile pour mes besoins futurs. Merci. – Nayn

Questions connexes