Je cherchais une méthode pour supprimer mon contenu XML d'apostrophes (') car mon SGBD se plaint de les recevoir.Désinfection des entrées DB avec XSLT
J'ai besoin
<name> Jim O'Connor</name>
devenir:
<name> Jim O''Connor</name>
En regardant l'exemple décrit here, qui est censé remplacer '
avec ''
, je construisais le script suivant:
<xsl:stylesheet version="1.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 name="sqlApostrophe">
<xsl:param name="string" />
<xsl:variable name="apostrophe">'</xsl:variable>
<xsl:choose>
<xsl:when test="contains($string,$apostrophe)">
<xsl:value-of select="concat(substring-before($string,$apostrophe), $apostrophe,$apostrophe)"
disable-output-escaping="yes" />
<xsl:call-template name="sqlApostrophe">
<xsl:with-param name="string"
select="substring-after($string,$apostrophe)" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$string"
disable-output-escaping="yes" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="text()">
<xsl:call-template name="sqlApostrophe">
<xsl:with-param name="string" select="."/>
</xsl:call-template>
</xsl:template>
</xsl:stylesheet>
MISE À JOUR: il fonctionne très bien
Merci pour votre aide
1) Quel processus et quelle langue utilisez-vous pour effectuer l'insertion de la base de données? 2) Le langage de la question 1 pourrait-il être utilisé pour pré-traiter les guillemets simples? – dacracot
J'appelle une procédure stockée SQL Server, avec un tas d'expressions XPath comme paramètres – azathoth
Votre procédure stockée est boguée. Vous devriez régler le problème ici, pas dans le XSLT. – Alohci