2011-04-27 4 views
0

나는 모든 것을 변수에 저장했습니다. 이걸 받으면 내가 원하는 토큰 토큰에 경로를 추가해야합니다. 경로는 path = /; domain = .myorg.com; 나는 그것이 경로를 추가 한 후 이렇게 반복되는 곳 WasToken에 경로를 추가하려면 위의 점에서 변수에 무언가 삽입하기

WasToken=AAECAzREQjgyNTY3NERCODI2Q0Zjbj1zYmswMi9vdT1iaG5zbS9vdT1pc2hzZy9vdT1kaXZhZG1pbi9vPWRvaANcWzW6mcn5IzHXtLr+BuYEMPTX; sessiontoken=DstTDbgX0ydK/nAixEvkBQCHrZ5CAar2DGq55U0Mo/6ll1+XEad3/cWyeXdO6hwmBePreLIW5d4CaoxiZHMEwuI5faG1j0UeRNizNJAw8JqEI0HuhpdpY5qSO46Iz+8WffmQoyemD/eQnWMkCeJbMwMHGIebSh7Q9mfC7wqoMqr+28IoeOYM93pPqVVwTiGOXEmiWdcp1S6WTKyw17E06S0GDlLA8eZlFFxFksgGtQiqsmp2vevWvz2dpmYYUPZ6TK3+vsNjkV2urGj24DHIrFGgU5J2eJq9qNEdEAtsuH71TJ6R0pyVK6h4FpaT1p5KurkdAZlIOl/Rpuzw2rnDNVJgW4PzWkeKIjoDDhlUhZ2cM4nNBoHqMGCz2HkwwbU72QVTzzXgwhOXtjrUlaaoZA==; WasToken=AAECAzREQjgyNTY3NERCODI2Q0Zjbj1zYmswMi9vdT1iaG5zbS9vdT1pc2hzZy9vdT1kaXZhZG1pbi9vPWRvaANcWzW6mcn5IzHXtLr+BuYEMPTX; NonceToken=61AF4E4A72A6749A8525787E0071880F; spikerAcceptLanguages=en-us%2Cen%3Bq%3D0.5; spikerStringLocale=en; spikerStyleLocale=en

WasToken=AAECAzREQjgyNTY3NERCODI2Q0Zjbj1zYmswMi9vdT1iaG5zbS9vdT1pc2hzZy9vdT1kaXZhZG1pbi9vPWRvaANcWzW6mcn5IzHXtLr+BuYEMPTX; path=/; domain=.myorg.com ; sessiontoken=DstTDbgX0ydK/nAixEvkBQCHrZ5CAar2DGq55U0Mo/6ll1+XEad3/cWyeXdO6hwmBePreLIW5d4CaoxiZHMEwuI5faG1j0UeRNizNJAw8JqEI0HuhpdpY5qSO46Iz+8WffmQoyemD/eQnWMkCeJbMwMHGIebSh7Q9mfC7wqoMqr+28IoeOYM93pPqVVwTiGOXEmiWdcp1S6WTKyw17E06S0GDlLA8eZlFFxFksgGtQiqsmp2vevWvz2dpmYYUPZ6TK3+vsNjkV2urGj24DHIrFGgU5J2eJq9qNEdEAtsuH71TJ6R0pyVK6h4FpaT1p5KurkdAZlIOl/Rpuzw2rnDNVJgW4PzWkeKIjoDDhlUhZ2cM4nNBoHqMGCz2HkwwbU72QVTzzXgwhOXtjrUlaaoZA==; WasToken=AAECAzREQjgyNTY3NERCODI2Q0Zjbj1zYmswMi9vdT1iaG5zbS9vdT1pc2hzZy9vdT1kaXZhZG1pbi9vPWRvaANcWzW6mcn5IzHXtLr+BuYEMPTX; path=/; domain=.myorg.com ; NonceToken=61AF4E4A72A6749A8525787E0071880F; spikerAcceptLanguages=en-us%2Cen%3Bq%3D0.5; spikerStringLocale=en; spikerStyleLocale=en

이 사용 XSL을 수행하는 방법이되어야합니다.

+0

나는이 이해가 안 돼요 . XSLT 변수에있는 문자열 중 ';'과 '='를 토큰 화하여 _ "토큰"_과 일치 시키려고합니까? –

+0

[XSL이 필요한 경우 제발] 중복 될 수 있습니다. (http://stackoverflow.com/questions/5372319/xsl-if-help-needed-please) –

+0

질문이 이해가 가지 않습니다. 그 긴 문자열을 담고있는'xsl : variable'을 가지고 있고, XSLT에서 그 값을 수정하고 싶습니까? 아마도 XML 및 XSLT의 관련 스 니펫을 게시 한 경우 도움이 될 것입니다. – MarcoS

답변

0

XSLT는 재귀 및 문자열 조작에별로 좋지 않습니다. 두 가지 모두 필요하지만 가능합니다. 여기 내 솔루션입니다 (당신이 "WasToken는"문자열의 시작 부분)에 항상있는 경우 예 (특정 문자열 패턴을 보장 할 수있는 경우 필요 이상으로 조건을 가질 수있는) :

<?xml version="1.0" encoding="UTF-8"?> 

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:output method="text" /> 

    <xsl:variable name="long.string">WasToken=AAECAzREQjgyNTY3NERCODI2Q0Zjbj1zYmswMi9vdT1iaG5zbS9vdT1pc2hzZy9vdT1kaXZhZG1pbi9vPWRvaANcWzW6mcn5IzHXtLr+BuYEMPTX; sessiontoken=DstTDbgX0ydK/nAixEvkBQCHrZ5CAar2DGq55U0Mo/6ll1+XEad3/cWyeXdO6hwmBePreLIW5d4CaoxiZHMEwuI5faG1j0UeRNizNJAw8JqEI0HuhpdpY5qSO46Iz+8WffmQoyemD/eQnWMkCeJbMwMHGIebSh7Q9mfC7wqoMqr+28IoeOYM93pPqVVwTiGOXEmiWdcp1S6WTKyw17E06S0GDlLA8eZlFFxFksgGtQiqsmp2vevWvz2dpmYYUPZ6TK3+vsNjkV2urGj24DHIrFGgU5J2eJq9qNEdEAtsuH71TJ6R0pyVK6h4FpaT1p5KurkdAZlIOl/Rpuzw2rnDNVJgW4PzWkeKIjoDDhlUhZ2cM4nNBoHqMGCz2HkwwbU72QVTzzXgwhOXtjrUlaaoZA==; WasToken=AAECAzREQjgyNTY3NERCODI2Q0Zjbj1zYmswMi9vdT1iaG5zbS9vdT1pc2hzZy9vdT1kaXZhZG1pbi9vPWRvaANcWzW6mcn5IzHXtLr+BuYEMPTX; NonceToken=61AF4E4A72A6749A8525787E0071880F; spikerAcceptLanguages=en-us%2Cen%3Bq%3D0.5; spikerStringLocale=en; spikerStyleLocale=en</xsl:variable> 

    <xsl:template match="/"> 
    <!-- This template can be called from different places with different params fed into it for the beginning and ending delimiters and the string to be inserted. --> 
    <xsl:call-template name="convert.string"> 
     <xsl:with-param name="string" select="$long.string" /> 
     <xsl:with-param name="delim.beg">WasToken=</xsl:with-param> 
     <xsl:with-param name="delim.end">; </xsl:with-param> 
     <xsl:with-param name="ins.string">path=/; domain=.myorg.com ; </xsl:with-param> 
    </xsl:call-template> 
    </xsl:template> 

    <!-- This is a template that will potentially be called later from itself (recursed) --> 
    <xsl:template name="convert.string"> 
    <xsl:param name="string" /> 
    <xsl:param name="delim.beg" /> 
    <xsl:param name="delim.end" /> 
    <xsl:param name="ins.string" /> 
    <xsl:choose> 
     <!-- Do a test using "starts-with" first (instead of just "contains") in case there's a situation where the ending delimiter text precedes the beginning delimiter text. --> 
     <xsl:when test="starts-with($string, $delim.beg) and contains($string, $delim.end)"> 
     <!-- Output everything up until the first instance of the ending delimiter. --> 
     <xsl:value-of select="substring($string, 1, string-length(substring-before($string,$delim.end)))" /> 
     <!-- Output the ending delimiter. --> 
     <xsl:value-of select="$delim.end" /> 
     <!-- Ouput the string to be inserted. --> 
     <xsl:value-of select="$ins.string" /> 
     <!-- Call this template again but only using the remainder text that follows the ending delimiter. --> 
     <xsl:call-template name="convert.string"> 
      <xsl:with-param name="string" select="substring-after($string, $delim.end)" /> 
      <xsl:with-param name="delim.beg" select="$delim.beg" /> 
      <xsl:with-param name="delim.end" select="$delim.end" /> 
      <xsl:with-param name="ins.string" select="$ins.string" /> 
     </xsl:call-template> 
     </xsl:when> 
     <!-- This test catches text that contains (but doesn't start with) a set of delimiters (perhaps after $string was truncated in a previous pass). It outputs everything in the string up until the first instance of the beginning delimiter. --> 
     <xsl:when test="contains($string, $delim.beg) and contains(substring-after($string, $delim.beg), $delim.end)"> 
     <xsl:value-of select="substring-before($string, $delim.beg)" /> 
     <xsl:call-template name="convert.string"> 
      <xsl:with-param name="string" select="substring-after($string, $delim.end)" /> 
      <xsl:with-param name="delim.beg" select="$delim.beg" /> 
      <xsl:with-param name="delim.end" select="$delim.end" /> 
      <xsl:with-param name="ins.string" select="$ins.string" /> 
     </xsl:call-template> 
     </xsl:when> 
     <!-- Output the remainder text (or all of the text if the delimiters were never found). --> 
     <xsl:otherwise> 
     <xsl:value-of select="$string" /> 
     </xsl:otherwise> 
    </xsl:choose> 
    </xsl:template> 

</xsl:stylesheet>