2010-08-17 9 views
1

salut je suis en train d'écrire une expression régulière à l'intérieur d'un xslt mais j'ai un problème avec le" signe. Je ferme l'attribut. et \ « Dosnt semblent fonctionner comme cela fonctionne dans les pages ASPX"attribut intérieur dans xslt

ici est mon code:

<xsl:if test="@text = 'yes'"> 
    <asp:RegularExpressionValidator runat="server" ControlToValidate="{@name}" 
    ValidationExpression="^[\w '%+*.!=/\\\[\]\{\}\?\,\(\)-]+$" 
    ErrorMessage=" " Display="Dynamic"> 
     <span class="red_star">*</span> 
    </asp:RegularExpressionValidator> 
</xsl:if> 

comment puis-je ajouter le » signe à l'expression régulière? donc ce sera comme ceci:

ValidationExpression = "^ [.! \ W « % + * =/\ [] {} \ \() \ "-] + $"

merci vous

+1

" devrait faire le travail, mais je ne sais pas beaucoup xslt –

Répondre

3

vous devez échapper à la " caractère &quot;:

<xsl:if test="@text = 'yes'"> 
    <asp:RegularExpressionValidator runat="server" ControlToValidate="{@name}" 
    ValidationExpression="^[\w '%+*.!=/\\\[\]\{\}\?\,\(\)\&quot;-]+$" 
    ErrorMessage=" " Display="Dynamic"> 
     <span class="red_star">*</span> 
    </asp:RegularExpressionValidator> 
</xsl:if> 

Il y a 5 caractère que si vous avez besoin de sortie en XML doivent être échappé:

 
- " (&quot;) 
- ' (&apos;) 
- < (&lt;) 
- > (&gt;) 
- & (&amp;) 
+0

N'est-ce pas '"'? – Kobi

+1

@kobi, corrigé –

+2

L'échappement '>' n'est généralement pas requis (seul le CDATA est parfois important). De plus, l'un des '' '' ou '' 'peut être laissé non échappé si l'autre caractère n'est pas présent dans la chaîne (l'autre caractère peut être utilisé comme délimiteur de chaîne) –

3

Vous devriez pouvoir exprimer "avec l'entité xml & quot;

0

Puisque vous générez un autre document XML (ou ASPX, ou HTML, d'ailleurs), je crois que vous avez besoin d'un peu plus d'encodage. Pour l'exemple, supposons que vous voulez attribute être abc"edf:

attr="abc&quot;edf", comme l'a suggéré, forcera le moteur XSL pour voir le texte attr="abc"edf". Dans ce cas, le XSL est valide, mais le document généré ne l'est pas!.

Ce que vous avez probablement besoin ici est:

attr="abc&amp;quot;edf" 

Ici, le moteur voit et génère XSL attr="abc&quot;edf" - qui est, vous voulez &quot; d'être partie de la sortie, pas l'entrée.


alt text http://yuml.me/3b1e45

(En tant alernative, vous pourriez vous en sortir avec des guillemets simples: attr='abc&quot;edf' - ce ne serait pas utile ici cependant, parce que vous avez aussi une citation unique dans votre chaîne. ..)

+0

Votre réponse est trompeuse et fausse. Fonctionnement du moteur XSL Le moteur XSL est, comme prévu, sensible au XML, ce qui signifie que lorsqu'il génère le document, il génère d'abord un arbre XML qui est ensuite sérialisé en une chaîne XML si nécessaire (ce qui n'est souvent pas le cas) Donc, d'abord, les documents XML et XSL sont analysés dans des objets XML, à ce stade, la valeur littérale de l'attribut "attr" est analysée et stockée comme: abc "edf.Ensuite, cette valeur d'attribut est définie à nouveau sur l'attribut de document de résultat, c'est-à-dire abc " edf lors de la sérialisation. Essayez-le dans n'importe quel moteur XSL et voyez par vous-même :-) – dionyziz

+0

@dionyziz - vous avez raison, et les deux réponses ci-dessus font ce point. Cependant, je suis assez sûr là où j'ai dû utiliser '& '; ou' & amp; '- Je vais vérifier dimanche et mettre à jour la réponse pour expliquer quand cela est approprié (désactiver la sortie échapper?). Si je me trompe totalement, je vais le supprimer. Ne vous inquiétez pas ':)' – Kobi