我在使用URL中的参数转换XSL时遇到问题。我不能再改变C#代码,只能对xsl文件进行更改。
C#代码:
string xml = "<APPLDATA><APPID>1052391</APPID></APPLDATA>";
XmlDocument oXml = new XmlDocument();
oXml.LoadXml(xml);
XslTransform oXslTransform = new XslTransform();
oXslTransform.Load(@"C:\Projects\Win\ConsoleApps\XslTransformTest\S15033.xsl");
StringWriter oOutput = new StringWriter();
oXslTransform.Transform(oXml, null, oOutput)
XSL代码:
<body>
<xsl:variable name="app">
<xsl:value-of select="normalize-space(APPLDATA/APPID)" />
</xsl:variable>
<div id="homeImage" >
<xsl:attribute name="style">
background-image:url("https://server/image.gif?a=10&Id='<xsl:value-of disable-output-escaping="yes" select="$app" />'")
</xsl:attribute>
</div>
</body>
</html>
网址已转换:
https://server/image.gif?a=10&Id='1052391'
预期的网址:
https://server/image.gif?a=10&Id='1052391'
我该如何解决这个问题?输出(oOutput.ToString())正在电子邮件模板中使用,因此它将从字面上转换URL。当您单击此请求(当然使用正确的服务器名称)时,将抛出403(禁止访问)错误。
答案 0 :(得分:1)
你得到的实际上是你想要的。 &符号必须以HTML格式转义,无论它出现在何处。所以这个
<div
id="homeImage"
style="background-image:url("https://server/image.gif?a=10&Id='1052391'")"
></div>
acutally 是有效的HTML,而这个
<div
id="homeImage"
style="background-image:url("https://server/image.gif?a=10&Id='1052391'")"
></div>
不是(在validator中查看)。您收到的错误必须来自其他地方。
答案 1 :(得分:1)
问题不在于&符号,而是id周围的单引号。如果他们必须在场,则必须进行网址编码。
所以(假设id周围不需要引号)这应该有效:
<body>
<xsl:variable name="app">
<xsl:value-of select="normalize-space(APPLDATA/APPID)" />
</xsl:variable>
<div id="homeImage" >
<xsl:attribute name="style">
<xsl:text disable-output-escaping="yes">background-image:url('https://server/image.gif?a=10&Id=</xsl:text>
<xsl:value-of disable-output-escaping="yes" select="$app" />
<xsl:text>')</xsl:text>
</xsl:attribute>
</div>
</body>