2010-05-25 10 views
1

URL의 매개 변수로 XSL을 변환하는 데 문제가 있습니다. 나는 C# 코드를 더 이상 변경할 수 없으며 xsl 파일 만 변경할 수 있습니다.xsl transform : 앰퍼샌드 URL 매개 변수의 문제점

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> 

URL은 변형 :

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

URL은 예상 :

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

나는이 문제를 어떻게 해결합니까

? 출력 (oOutput.ToString())은 전자 메일 서식 파일에서 사용되고 있으므로 문자 그대로 변환 된 URL을 사용합니다. 물론 올바른 서버 이름으로이 요청을 클릭하면 403 (액세스 금지) 오류가 발생합니다.

답변

1

당신이 얻는 것은 실제로 당신이 원하는 것입니다. 앰퍼샌드 은 어디서나 HTML로 이스케이프 처리해야합니다 (). 이

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

합니다 (validator에서 확인)하지 동안 그래서이

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

는 acutally 유효한 HTML이다. 오류는 다른 곳에서 발생해야합니다.

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> 
관련 문제