2010-08-17 91 views
1

嗨,我想写一个正则表达式在xslt 里面,但我有一个问题”的迹象。 我关闭了属性。和\“dosnt似乎工作像它在aspx页面“里面属性xslt

这里是我的代码:

<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> 

我怎样才能添加”符号正则表达式? 所以这将是这样的:

ValidationExpression =“^ [。!?\ W“%+ * =/\ [] {} \ \,()\ ” - ] + $“

谢谢你

+1

"应该做的工作,但我不知道太多xslt – 2010-08-17 08:55:26

回答

3

你需要躲避"字符&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> 

有5个字符,如果你需要输出的XML需要进行转义:

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

是不是'"'? – Kobi 2010-08-17 09:04:50

+1

@kobi,更正 – 2010-08-17 09:08:52

+2

通常不需要转义'>'(仅在CDATA中才有意义)。另外,如果另一个字符不存在于字符串中(另一个字符可以用作字符串分隔符),则可以将其中一个'“或'''作为非转义字符 – 2010-08-17 12:46:43

3

您应该能够表达“与xml实体&”;

0

由于您正在生成另一个XML文档(或aspx或HTML,对于这个问题),我相信你需要多一点编码。例如,假设您要attributeabc"edf

attr="abc&quot;edf",如上所示,将使XSL引擎看到文本为attr="abc"edf"。在这种情况下,XSL是有效的,但生成的文件不是

什么,你可能需要在这里:

attr="abc&amp;quot;edf" 

这里,XSL引擎看到并产生attr="abc&quot;edf" - 也就是你想要&quot;为输出的一部分,而不是输入。


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

(作为一个alernative,你也许可以侥幸逃脱单引号:attr='abc&quot;edf' - 这不会帮助这里虽然,因为你也有你的字符串中的单引号。 ..)

+0

您的回答有误导性和不真实性。 XSL引擎是如何工作的,正如预期的那样,XSL引擎具有XML感知能力,这意味着当它生成文档时,它首先生成一个XML树,如果需要,它将被序列化为一个XML字符串(通常不是) 因此,首先将XML和XSL文档解析为XML对象,此时将解析属性“attr”的字面值并存储为:abc“edf。然后,该属性值再次逐字地设置为结果文档属性,即,当序列化时产生edf。在任何XSL引擎中尝试一下,看看自己:-) – dionyziz 2010-08-19 12:05:30

+0

@dionyziz - 你是对的,上面的两个答案表明了这一点。然而,我很确定在那里我必须使用'&“或'& amp;' - 我会在星期天检查并更新答案以解释何时适用(禁用输出转义?)。如果我完全错了,我会删除它。别担心':)' – Kobi 2010-08-19 17:37:11