Subject: [xsl] conditional replacement From: "Ganesh Babu N" <nbabuganesh@xxxxxxxxx> Date: Tue, 13 Jan 2009 17:52:08 +0530 |
Dear All, Input XML is: <authors> <ce:author> <ce:given-name>Michael</ce:given-name> <ce:surname>Wininger</ce:surname> </ce:author> <ce:author> <ce:given-name>Nam-Hun</ce:given-name> <ce:surname>Kim</ce:surname> </ce:author> <ce:author> <ce:given-name>Patrick A.</ce:given-name> <ce:surname>Costigan</ce:surname> </ce:author> <ce:author> <ce:given-name>K.</ce:given-name> <ce:surname>Mithraratne</ce:surname> </ce:author> <ce:author> <ce:given-name>N.S.</ce:given-name> <ce:surname>Stott</ce:surname> </ce:author> </authors> I have successfully transformed the given-name into its initials with the below XSL <xsl:template match="authors"> <xsl:apply-templates select="ce:author"/> </xsl:template> <xsl:template match="ce:author"> <xsl:choose> <xsl:when test="matches(ce:given-name,'^[A-Z][a-z]')"> <xsl:variable name="text" select="tokenize(ce:given-name,' ')"/> <xsl:for-each select="$text"> <xsl:choose> <xsl:when test="contains(.,'-')"> <xsl:variable name="htext" select="tokenize(.,'-')"/> <xsl:value-of select="concat(substring(subsequence($htext,1,1),1,1),'.','-,substring(subsequence($htext,2,2),1,1),'.')"/> </xsl:when> <xsl:otherwise> <xsl:choose> <xsl:when test="not(contains(.,'.'))"> <xsl:value-of select="concat(substring(.,1,1),'.')"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="."/> </xsl:otherwise> </xsl:choose> </xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:when> <xsl:otherwise> <xsl:value-of select="ce:given-name"/> </xsl:otherwise> </xsl:choose> </xsl:template> and got the output like below: <author>M. Wininger</author> <author>N.-H. Kim</author> <author>P.A. Costigan</author> <author>K. Mithraratne</author> <author>N.S. Stott</author> Now I am having two requirements. 1. insert space between initials. 2. remove '.' in the initials. These two conditions I am taking from ini.xml file. I have tried with the following expressions but I am not getting the result. <xsl:template match="ce:author"> <xsl:if test="document('ini.xml')//init/space = 1"> <xsl:variable name="space" select=" "/> </xsl:if> <xsl:choose> <xsl:when test="document('ini.xml')//init/remove = 1"> <xsl:variable name="pat" select="string('.')"/> </xsl:when> <xsl:otherwise> <xsl:variable name="pat" select="\.[^$]"/> </xsl:otherwise> <xsl:choose> <xsl:when test="matches(ce:given-name,'^[A-Z][a-z]')"> <xsl:variable name="text" select="tokenize(ce:given-name,' ')"/> <xsl:for-each select="$text"> <xsl:choose> <xsl:when test="contains(.,'-')"> <xsl:variable name="htext" select="tokenize(.,'-')"/> <xsl:value-of select="concat(substring(subsequence($htext,1,1),1,1),'.','-,substring(subsequence($htext,2,2),1,1),'.')"/> </xsl:when> <xsl:otherwise> <xsl:choose> <xsl:when test="not(contains(.,'.'))"> <xsl:value-of select="replace(concat(substring(.,1,1),'.'),$pat,'.{$space}')"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="replace(.,$pat,'.{$space}')"/> </xsl:otherwise> </xsl:choose> </xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:when> <xsl:otherwise> <xsl:value-of select="replace(ce:given-name,$pat,'.{$space}')"/> </xsl:otherwise> </xsl:choose> </xsl:template> Check for the replace function and variable declaration. Please help me. Regards, Ganesh
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] To control node duplicati, George Cristian Bina | Thread | Re: [xsl] conditional replacement, Mukul Gandhi |
Re: [xsl] To control node duplicati, George Cristian Bina | Date | [xsl] Re-arranging an XML file, Mike Stroud |
Month |