2017-09-05 5 views
0

pouvons-nous ajouter tag personnalisé ou fonction dans XSLT.Je vais vous expliquer à nouveau j'ai ajouté un tag include-html dans ma démo .can nous ajoutons toute logique dans XSLT quand nous trouvons include-html dans ma feuille de style il correspond à ce modèle avec la valeur de l'étiquette (même que nous faire dans apply-template) et obtenir des valeurs et afficher en sortie.Comment ajouter des balises personnalisées dans xslt?

Voici mon code. http://xsltransform.net/6pS1zDt/1

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" /> 

    <xsl:template match="/"> 
     <hmtl> 
     <head> 
      <title>New Version!</title> 
     </head> 
     <include-html>a</include-html> 
     </hmtl> 
    </xsl:template> 

    <xsl:template match="a"> 
    <xsl:variable name="ab" select="'ss'"/> 
    <p><xsl:value-of select="$ab"/></p> 
</xsl:template> 
</xsl:transform> 

Dans mon exemple, je vous écris a valeur de include-html value.No correspondre à le modèle et le retour **<p>ss</p>**

<include-html>a</include-html> 

Sortie prévue

**<p>ss</p>** 
+0

vous devez recommencer ht tps: //www.w3schools.com/xml/xsl_intro.asp –

+0

@MatthewWhited je sais ces choses – naveen

Répondre

0

Vous pouvez y parvenir avec une sorte de meta stylesheet (le nom de t il test.xslt):

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:output method="xml" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" /> 

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

    <xsl:template match="/whatever"> 
     <hmtl> 
     <head> 
      <title>New Version!</title> 
     </head> 
     <include-html>a</include-html> 
     </hmtl> 
    </xsl:template> 

    <xsl:template match="include-html[text()='a']"> 
    <xsl:variable name="ab" select="'ss'"/> 
    <p><xsl:value-of select="$ab"/></p> 
    </xsl:template> 

</xsl:transform> 

Si vous passez ceci à votre processeur XSLT XSLT et entrée XML comme

xsl.sh test.xslt test.xslt 

la sortie est

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:output method="xml" 
       omit-xml-declaration="yes" 
       encoding="UTF-8" 
       indent="yes"/> 

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

    <xsl:template match="/whatever">  <!-- must NOT match --> 
     <hmtl> 
     <head> 
      <title>New Version!</title> 
     </head> 
     <p>ss</p>      <!-- REPLACED! --> 
     </hmtl> 
    </xsl:template> 

    <xsl:template match="include-html[text()='a']"> 
     <xsl:variable name="ab" select="'ss'"/> 
     <p> 
     <xsl:value-of select="$ab"/> 
     </p> 
    </xsl:template> 

</xsl:transform> 

qui est proche de ce que vous voulez, je suppose ...