2009-10-31 39 views
2

,我有一个字符串我想逃避在URL中使用,例如:URL和&符号使用XSLT和XPath 1.0

<description>one word &amp; another</description> 

所以,文本()的描述元素应该得到网址已转义。

我该怎么做?

使用C#(XslCompiledTransform)的代码如下:

string a = Server.UrlEncode("one word & another"); 

,并会产生:

one+word+%26+another 

有什么建议?

+1

您调整后的代码会导致无效假设。如果您的XML中有&,并且您使用XML阅读器进行解析,则内存中的字符串永远不会看到&。 XML解析器会自动将其转换为非转义版本。所以除非你的UrlEncode代码片段中的字符串使用正则表达式或其他东西(你永远不应该这样做)从XML中剥离出来,否则不适用 – Jherico 2009-10-31 17:10:17

+0

是的,当然,你是对的。你将如何去获取XSLT的输出? – 2009-10-31 19:43:07

回答

4

没有什么内置做到这一点的,但不是推倒重来有样式表已经出来了例如有:

http://skew.org/xml/stylesheets/url-encode/

的变换是简单的,但(希望)别人会已经完成了调试你...

+0

所以真的没有办法很容易地将任何短片段文本转换为链接? – 2009-10-31 19:44:12

+0

单独使用XSLT - 这是一种通用的转换语言,所以它并不是真的令人惊讶。您可以开始混合其他技术来简化任务,例如,您可以在使用xpath从XmlDocument中挑选出节点后,使用Server.UrlEncode操作源XML(codeproject.com/KB/cpp/myXPath.aspx),然后通过XSLT推送结果。真的取决于上下文。 – FinnNk 2009-10-31 21:14:46

+0

谢谢你们,这些样式表非常有帮助。 – 2009-11-01 00:00:49

2

在XML(因此XSL),你需要使用

&amp; 
&lt; 
&gt; 
+1

+1,虽然你通常不需要*来转义'>'。 http://www.w3.org/TR/2008/REC-xml-20081126/#syntax – Tim 2009-10-31 15:24:10

+0

这是真的,这可能正在淡化人们的看法。记住'>'不是规则的例外情况,这很简单(也许更好)。 – Tomalak 2009-11-03 14:31:05

2

片段<description>one word & another</description>类似于XML逃脱&,>和<,而是赤裸裸的符号是非法的。 XSL需要合法的XML。

的一种方法,使之法律无取代的&amp;是使文字变成CDATA部分:

<description><![CDATA[one word & another]]></description> 
+0

绝对正确。我调整了我的代码片段来补偿。你对我的问题有一个答案,这实际上是关于如何用有效URL替换URL非法字符,即URL到URL转义文本? – 2009-10-31 16:32:33

+0

这是正确的,但它不是问题的答案。 – elzapp 2009-11-03 08:19:28

1

您可以使用XSLT 2.0吗?因为这将整理出所有的问题一记漂亮的URL编码功能,我只提到它..

<xsl:value-of select="url:encode('This is URL encoded')" /> 
+0

我想使用XSLT 2,但我不确定使用.NET的哪个实现。 – 2009-11-03 11:21:18

+0

也许这会使您指向正确的方向:http://stackoverflow.com/questions/94047/are-net-3 -5-的XPath类和的方法,XSLT-2-0兼容 – 2009-11-03 16:04:14

1

对于我而言,这些解决方案的工作。我是一个专有的框架内工作,并且使用实体:

&#38; 

当时我能够添加额外的参数,以一个URI字符串,在一个XSL模板的上下文的唯一途径。