2009-10-02 9 views
0

J'ai une fonction XSLT qui prend une expression régulière en tant que paramètre mais l'analyseur XSLT ne l'aime pas.Expression régulière dans XSLT

Voici le code:

<xsl:value-of select='ns:RegexReplace($variable, "", "style=\"\w+\:\s\w+;\"")' disable-output-escaping='yes' /> 

J'ai trouvé ceci: http://www.xml.com/pub/a/2003/06/04/tr.html < - mais il utilise ce que je suis et semble fonctionner (pour eux). Est-ce que j'ai juste un analyseur d'ordures ??

Y at-il un moyen de le faire? Ou, une façon de forcer un élément à ignorer le style en ligne via un trick CSS?

+1

De votre échantillon ccode il semble que si vous utilisez une extension XSLT. Quel genre d'extension est-ce? Et pour une solution, il est utile de savoir quelle plate-forme vous possédez car il existe des extensions spécifiques aux plates-formes disponibles pour les expressions régulières. –

+0

@divo - L'extension XSLT est sans importance car je parle juste de passer dans le paramètre. Malheureusement, je ne connais pas les détails de l'analyseur. – tgandrews

+0

Vous devez probablement remplacer les guillemets dans votre expression par une entité XML (") –

Répondre

2

Vous semblez essayer d'inclure des guillemets dans un littéral de chaîne XPath délimité par des guillemets en les échappant avec une barre oblique inverse. Cela ne fonctionne pas.

Dans XPath 1.0 (XSLT 1), il n'y a pas de bonne façon de procéder. Vous devrez peut-être recourir à des astuces comme la définition d'une variable qui est titulaire d'un seul caractère de citation et d'utiliser la fonction concat pour créer votre chaîne:

<xsl:variable name='quot' select="'&quot;'"/> 
<xsl:value-of select='concat("a string with a quote ", $quot, " character")'/> 

Dans XPath 2.0 XSLT (2), vous pouvez échapper à une citation avec une autre citation:

<xsl:value-of select='"a string with a quote "" character"'/> 
0

Il m'apparaît que vous essayez d'enlever les attributs style. Si tel est le cas, le remplacement de chaîne ne va pas vous aider.

Vous pouvez supprimer les attributs de style par exemple en écrivant un modèle qui les met en correspondance et produit rien:

<xsl:template match="@style"/> 
+0

Malheureusement, il existe une fonction qui renvoie le style inline en tant que texte et ne peut donc pas être supprimée de cette façon. – tgandrews