【问题标题】:xsl transform: problem with Ampersand URL parametersxsl 转换:与符号 URL 参数有关的问题
【发布时间】:2010-07-21 00:17:01
【问题描述】:

我在使用 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&amp;Id='<xsl:value-of disable-output-escaping="yes" select="$app" />'")
      </xsl:attribute>

    </div>
  </body>
</html>

网址转换:

https://server/image.gif?a=10&amp;Id='1052391'

预期网址:

https://server/image.gif?a=10&Id='1052391'

我该如何解决这个问题?输出 (oOutput.ToString()) 正在电子邮件模板中使用,因此它对 URL 进行了字面转换。当你点击这个请求(当然是正确的服务器名称)时,会抛出 403(禁止访问)错误。

【问题讨论】:

    标签: xslt


    【解决方案1】:

    问题不在于与号,而在于 id 周围的单引号。如果它们必须存在,则必须对其进行 url 编码。

    所以(假设 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&amp;Id=</xsl:text>
            <xsl:value-of disable-output-escaping="yes" select="$app" />
            <xsl:text>')</xsl:text>
          </xsl:attribute>
        </div>
      </body>
    

    【讨论】:

      【解决方案2】:

      你得到的其实就是你想要的。 &符号 必须 在 HTML 中进行转义,无论它出现在何处。所以这个

      <div 
        id="homeImage" 
        style="background-image:url(&quot;https://server/image.gif?a=10&amp;Id='1052391'&quot;)"
      ></div>
      

      确实有效的HTML,而这个

      <div 
        id="homeImage" 
        style="background-image:url(&quot;https://server/image.gif?a=10&Id='1052391'&quot;)"
      ></div>
      

      不是(在validator 中查看)。您收到的错误一定来自其他地方。

      【讨论】:

        猜你喜欢
        • 2013-07-11
        • 2017-02-18
        • 2011-03-15
        • 1970-01-01
        • 1970-01-01
        • 2017-07-22
        • 1970-01-01
        • 1970-01-01
        • 2012-02-07
        相关资源
        最近更新 更多