2013-05-08 2 views
0

XML에서 일부 텍스트를 변경하려고합니다. 그러나 그것은 작동하지 않았다.XSLT를 사용하여 텍스트 변경

[intro]의 텍스트를 모두 Path(text)으로 변경해야 표시 [intro] 앞에 표시해야합니다. 내가

<a href="Content\3\D\D\3DD3D025-2236-49C9-A169-DD89A36DA0E6/eee.pdf"> 

에 어떤 도움을 변경하려면 예를

<a href="3DD3D025-2236-49C9-A169-DD89A36DA0E6/eee.pdf"> --> wrong path 

를 들어

은 크게 감상 할 수있다.

샘플 XML

<?xml version="1.0"?> 
<root> 
    <intro xml:lang="en"> 
    <div class="blueBar"> 
     <h2>Highlights</h2> 
     <ul> 
     <li><a href="http://xxx/xxx/default.asp?lang=En">aaaa</a></li> 
     <li><a href="http://xxx/default.asp?lang=En">bbbb</a></li> 
     <li><a href="http://xxx/Content/1/C/D/1CD1DFC3-5149-4D61-A7C3-2D9CF7E65F8C/rrr.pdf">ccc</a></li> 
     <li><a href="3DD3D025-2236-49C9-A169-DD89A36DA0E6/eee.pdf">pdf</a></li> 
     </ul> 
    </div> 
    </intro> 
    <intro> .....</intro> 
</root> 

샘플 XSLT

<xsl:param name="language"/> 

<xsl:template match="root"> 
    <xsl:for-each select="intro[lang($language)]//@href"> 
    <xsl:choose> 
     <xsl:when test="contains(.,'pdf') and not(contains(.,'Content'))"> 
     <xsl:variable name="pdfGuid"> 
      <xsl:value-of select="substring(.,0,36)"/> 
     </xsl:variable> 
     <xsl:variable name="pdfPath"> 
      <xsl:value-of select="concat('&#47;','Content')"/> 
      <xsl:value-of select="concat('&#47;', substring($pdfGuid, 1,1))"/> 
      <xsl:value-of select="concat('&#47;', substring($pdfGuid, 2,1))"/> 
      <xsl:value-of select="concat('&#47;', substring($pdfGuid, 3,1))"/> 
      <xsl:value-of select="concat('&#47;', $pdfGuid)"/> 
     </xsl:variable>  
     <xsl:value-of select="strJS:replace(string(.),string($pdfGuid),string($pdfPath))" disable-output-escaping="yes"/> 
     </xsl:when> 
     <xsl:otherwise> 
     <xsl:value-of select="." disable-output-escaping="yes"/> 
     </xsl:otherwise> 
    </xsl:choose>  
    </xsl:for-each> 

    <div class="greenBox"> 
    <xsl:value-of select="intro[lang($language)]" disable-output-escaping="yes"/> 
    </div>  

</xsl:template> 
+0

XSLT는 이해가되지 않습니다 내가 당신이 원하는 것은이 같은 것입니다 생각한다. ''는 무엇을합니까? 왜'disable-output-escaping'을 사용합니까 ?? 작고, 충분하고 충분한 예제를 만들 수 있을까요? XML로 무엇을 가지고 있으며 출력에서 ​​원하는 것은 무엇입니까? – kan

답변

0

여기에 질문을 명확하게 당신이 원하는 출력과 어떤 문제가 당신이 발생하는 것입니다 설명하십시오.

문제에 대한 설명과 슬래시를 사용하고있는 시도와 XSLT의 경로 시작 부분에있는 설명과 설명에 백 슬래시가 일치하지 않습니다. 슬래시를 원한다고 가정하겠습니다. 그러나 쉽게 변경할 수 있습니다. 샘플 입력을 실행하면

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> 
    <xsl:param name="language" select="'en'" /> 

    <xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="/*"> 
    <div class="greenBox"> 
     <xsl:apply-templates select="intro[lang($language)]/node()" /> 
    </div> 
    </xsl:template> 

    <xsl:template match="@href[contains(., 'pdf') and not(contains(., 'Content'))]"> 
    <xsl:attribute name="href"> 
     <xsl:value-of select="concat('/Content/', 
            substring(., 1, 1), '/', 
            substring(., 2, 1), '/', 
            substring(., 3, 1), '/', 
            .)"/> 
    </xsl:attribute> 
    </xsl:template> 
</xsl:stylesheet> 

, 결과는 다음과 같습니다 :

<div class="greenBox"> 
    <div class="blueBar"> 
     <h2>Highlights</h2> 
     <ul> 
     <li> 
      <a href="http://xxx/xxx/default.asp?lang=En">aaaa</a> 
     </li> 
     <li> 
      <a href="http://xxx/default.asp?lang=En">bbbb</a> 
     </li> 
     <li> 
      <a href="http://xxx/Content/1/C/D/1CD1DFC3-5149-4D61-A7C3-2D9CF7E65F8C/rrr.pdf">ccc</a> 
     </li> 
     <li> 
      <a href="/Content/3/D/D/3DD3D025-2236-49C9-A169-DD89A36DA0E6/eee.pdf">pdf</a> 
     </li> 
     </ul> 
    </div> 
    </div> 
관련 문제