Rechercher et Remplacer avec Unique
Je suis d'effectuer une rechercher et remplacer sur le caractère de saut de ligne (
) et de le remplacer par le paragraphe proche et le paragraphe ouvrir des balises à l'aide du code suivant:
<xsl:template match="/STORIES/STORY">
<component>
<xsl:if test="boolean(ARTICLEBODY)">
<p>
<xsl:call-template name="replace-text">
<xsl:with-param name="text" select="ARTICLEBODY" />
<xsl:with-param name="replace" select="' '" />
<xsl:with-param name="by" select="'</p><p>'" />
</xsl:call-template>
</p>
</xsl:if>
</component>
</xsl:template>
<xsl:template name="replace-text">
<xsl:param name="text"/>
<xsl:param name="replace" />
<xsl:param name="by" />
<xsl:choose>
<xsl:when test="contains($text, $replace)">
<xsl:value-of select="substring-before($text, $replace)"/>
<xsl:value-of select="$by" disable-output-escaping="yes"/>
<xsl:call-template name="replace-text">
<xsl:with-param name="text" select="substring-after($text, $replace)"/>
<xsl:with-param name="replace" select="$replace" />
<xsl:with-param name="by" select="$by" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$text"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Cela fonctionne presque parfaitement, sauf que j'ai vraiment besoin de dup la ligne de flux que les articles ont tendance à être séparés par 2 ou plus, résultant en </p><p></p><p>
.
Est-il possible d'obtenir en sorte qu'il ne remplacera jamais une fois par paragraphe?
OriginalL'auteur Xetius | 2008-08-27
Vous devez vous connecter pour publier un commentaire.
disable-output-escaping
n'est pas mal en soi, mais rares sont les cas où vous devez l'utiliser et ce n'est pas l'un d'eux. En XSLT vous travaillez avec des arbres, pas de balisage de la chaîne. Voici un XSTL 1.0 solution:OriginalL'auteur jelovirt
Essayez ceci (XSLT 2.0):
C'est généralement une mauvaise idée d'utiliser des chaînes de caractères littérales pour les mettre dans des balises XML, puisque vous ne pouvez pas garantir que les résultats sont équilibrés.
OriginalL'auteur James Sulak
Étant donné les fonctions XPath que vous appelez dont je ne me souviens pas d'avoir le luxe de dans mon MSXSL travail, il semblerait que vous utilisez un XPath 2-processeur compatible.
Si c'est le cas, n'est-ce pas XPath 2 ont un replace(chaîne, le motif de remplacement) fonction qui prend une regex comme un deuxième paramètre?
Il pourrait aider à avoir quelques exemples Xml d'entrée et de savoir quel processeur vous envisagez d'utiliser.
Dans votre exemple, il semble que le double de paragraphes ont tous un espace blanc seulement préfixe. Donc, quelque chose comme cette légère modification peut garniture de dupes.
OriginalL'auteur Mike Haboustak