2013-05-08 3 views
0

Я пытаюсь изменить текст из XML. Однако это не сработало.Изменить текст с помощью XSLT

Я должен показать все [intro] текст из XML некоторые Path(text) должны изменить перед отображением [intro].

Например

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

Я хотел бы, чтобы изменить

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

Любая помощь будет принята с благодарностью.

Пример 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 не имеет смысла. Что означает '' do? Почему вы используете '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>