Bonjour tout le monde.

J'essaie de récupérer le contenu de flux RSS externes, pour le mettre sur mon site.
Je parse ces flux avec une feuille de style XSL.

Mon problème est que dans certaines description que je récupère, apparaissent des balises HTML et je m'arrache les cheveux pour parvenir à les enlever.

Exemple :

Je récupère :

Les dégâts provoqués par Xynthia posent des questions sur la solidité des digues et les zones réputées "constructibles" <img src="http://feeds.feedburner.com/~r/France2-ALaUne/~4/rCCi9iINDtY" height="1" width="1"/>


Ce qui m'affiche :

Les dégâts provoqués par Xynthia posent des questions sur la solidité des digues et les zones réputées "constructibles" <img src="http://feeds.feedburner.com/~r/France2-ALaUne/~4/rCCi9iINDtY" height="1" width="1"/>


Or je ne voudrais que :

Les dégâts provoqués par Xynthia posent des questions sur la solidité des digues et les zones réputées "constructibles"


J'ai essayé plusieurs fonctions XPATH, mais je n'arrive jamais au bon résultat, étant donné que la position du balisage HTML varie selon les flux.


Merci par avance pour toute personne qui m'apportera son aide Smiley smile
Après d'avantages de recherches et moultes essaies, je suis parvenu à trouver une solution satisfaisante :

Déclarer un template ...

<xsl:template name="strip-tags">

<xsl:param name="text"/>

<xsl:choose>

<xsl:when test="contains($text, '&lt;')"> <!-- Pour les balises -->
<xsl:value-of select="substring-before($text, '&lt;')"/>
<xsl:call-template name="strip-tags">
<xsl:with-param name="text" select="substring-after($text, '&gt;')"/>
</xsl:call-template>
</xsl:when>

<xsl:otherwise> <!-- Sinon on affiche le texte -->
<xsl:value-of select="$text"/>
</xsl:otherwise>

</xsl:choose>

</xsl:template>

... et l'utiliser comme suit :

<xsl:call-template name="strip-tags">
<xsl:with-param name="text" select="description"/>
</xsl:call-template>

Si ça peut aider quelqu'un...
Salut,

j'ai fait 2 templates, une quand le texte est entre <![CDATA[ et ]]> et l'autre sans.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
				xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
				xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output
	method="text"
	standalone="yes"
	indent="yes"
	encoding="UTF-8"/>


<xsl:template name="xparse-cdata-escape-tag-not-tag">
	<xsl:param name="node"/>

<!-- 	<xsl:variable name="before" select="substring-before($node, '&amp;lt;')"/> ne fonctionne pas -_- -->
	<xsl:variable name="before" select="substring-before($node, 'lt;')"/>
	<xsl:variable name="before-length" select="string-length($before)"/>

	<xsl:choose>
<!-- 		on vérifie que la chaine est vide ou si le caractère & n'est présent -->
		<xsl:when test="$before-length = 0 or substring($before, $before-length) != '&'">
			<xsl:value-of select="$node"/>
		</xsl:when>
		<xsl:otherwise>
			<xsl:variable name="after" select="substring-after($node, 'gt;')"/>
			<xsl:variable name="after-length" select="string-length($after)"/>

			<xsl:choose>
<!-- 		on vérifie que la chaine est vide ou si le caractère & n'est présent -->
				<xsl:when test="$after-length = 0 or substring($node, string-length($node) - $after-length - 3, 1) != '&'">
					<xsl:value-of select="$node"/>
				</xsl:when>
				<xsl:otherwise>
<!-- 					affiche la chaine $before sans le & -->
					<xsl:value-of select="substring($before, 1, $before-length - 1)"/>

					<xsl:call-template name="xparse-cdata-escape-tag-not-tag">
						<xsl:with-param name="node" select="$after"/>
					</xsl:call-template>
				</xsl:otherwise>
			</xsl:choose>
		</xsl:otherwise>
	</xsl:choose>
</xsl:template>


<xsl:template name="xparse-text-not-tag">
	<xsl:param name="node"/>
	<xsl:variable name="before" select="substring-before($node, '<')"/>

	<xsl:choose>
		<xsl:when test="string-length($before) != 0 or contains($node, '<')">
			<xsl:value-of select="$before"/>
			<xsl:call-template name="xparse-text-not-tag">
				<xsl:with-param name="node" select="substring-after($node, '>')"/>
			</xsl:call-template>
		</xsl:when>
		<xsl:otherwise>
			<xsl:value-of select="$node"/>
		</xsl:otherwise>
	</xsl:choose>
</xsl:template>


<xsl:template match="/">
	xparse-cdata-escape-tag-not-tag
	<xsl:for-each select="root/desc">
		- <xsl:value-of select="."/>
		- <xsl:call-template name="xparse-cdata-escape-tag-not-tag">
			<xsl:with-param name="node" select="."/>
		</xsl:call-template>
		---------------
	</xsl:for-each>

	xparse-text-not-tag
	<xsl:for-each select="root/desc">
		- <xsl:value-of select="."/>
		- <xsl:call-template name="xparse-text-not-tag">
			<xsl:with-param name="node" select="."/>
		</xsl:call-template>
		---------------
	</xsl:for-each>
</xsl:template>

</xsl:stylesheet>


<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="xparse-not-tag.xsl"?>

<root>
	<desc><![CDATA[<a>Bidule</a> truc chouette. (CDATA + escape)]]></desc>
	<desc><a>Bidule</a> truc chouette. (escape)</desc>
	<desc>plop <a>Bidule</a> truc chouette. (escape)</desc>
	<desc><![CDATA[Bidule <span>blah</span> blah. (CDATA)]]></desc>
	<desc><![CDATA[<a>Bidule</a> truc chouette. (CDATA + escape-left)]]></desc>
	<desc><![CDATA[Ho ! <a>Une</a> mouette. (CDATA)]]></desc>
	<desc><a>Bidule</a>; truc chouette. (escape-left)</desc>
	<desc>blah <a href="#">blah</a> blah. (node)</desc>
</root>