XSLT::Field mapping through an additional XML

Sometime we need to introduce a way to create an association in the process. In doing so, introducing a map file provides a simple way to do such.
Here’s an example:

I add a mapper.xml that holds two mapping categories (grup id and user type).

<!-- // mapper.xml // -->
<?xml version="1.0" encoding="UTF-8"?>
<mapper>
    <group_id>
        <value id="1">2</value>
        <value id="2">3</value>
    </group_id>
    <user_type>
        <value type="Test User">Real User</value>
        <value type="Public">Private</value>
    </user_type>
</mapper>

Here’s an example file.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<!-- declare XSL variables -->
<xsl:variable name="groupId" select="document('mapper.xml')/mapper/group_id"/>
<xsl:variable name="userType" select="document('mapper.xml')/mapper/user_type"/>

<xsl:template match="field">
    <xsl:choose>
        <xsl:when test="@name='gid'">
            <xsl:call-template name="getGrpId">
                <xsl:with-param name="gid" select="."/>
            </xsl:call-template>
        </xsl:when>
        <xsl:when test="@name='usertype'">
	    <!-- if usertype tag get the value and get the mapping value -->
            <xsl:call-template name="getUserType">
                <xsl:with-param name="utype" select="."/>
            </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
            <xsl:copy-of select="."/>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>
<xsl:template name="getGrpId">
    <xsl:param name="gid"/>
    <field name="gid">
	<!-- You can simply refer the mapper by variable and compare to get the results -->
        <xsl:value-of select="$groupId/value[@id=$gid]"/>
    </field>
</xsl:template>

<xsl:template name="getUserType">
    <xsl:param name="utype"/>
    <field name="usertype">
        <xsl:value-of select="$userType/value[@type=$utype]"/>
    </field>
</xsl:template>

XSLT::Removing unwanted empty space

For example,

<entries>
    <Item>iGood</Item>
    <!-- unwanted empty space -->

    <Manufacturer>Apple</Manufacturer>
    <Date>01-Jul-2011 11:35:18 UTC</Date>
</entries>

Declare this. Note: Visualize removed space but not actually remove it.

<xsl:strip-space elements="*"/>

XSLT::Template example

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

<xsl:template match="/">
    <users>
    <xsl:for-each select="users/user">
        <user><xsl:apply-templates /></user>
    </xsl:for-each>
    </users>
</xsl:template>

<xsl:template match="field">
    <xsl:choose>
        <xsl:when test="@name='name'">
            <xsl:call-template name="getname">
                <xsl:with-param name="fname" select="." />
                <xsl:with-param name="lname" select="following-sibling::field[position()=1]" />
            </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
            <xsl:copy-of select="." />
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

<xsl:template name="getname">
    <xsl:param name="fname" />
    <xsl:param name="lname" />
    <xsl:if test="string-length($lname) > 0">
        <field name="name">
            <xsl:value-of select="concat($fname, ' ', $lname)"/>
        </field>
    </xsl:if>
    <xsl:if test="string-length($lname) = 0">
        <field name="name">
            <xsl:value-of select="$fname"/>
        </field>
    </xsl:if>
</xsl:template>

</xsl:stylesheet>

PHP::XML character conversion

function unicodeEntities($str) {
	$char = array(
		'Š','’','–','š',
		'"','&lt;','&gt;','¡','¢','£','¤','¥','¦','§',
		'¨','©','ª','«','¬','­','®','¯','°','±',
		'²','³','´','µ','¶','·','¸','¹','º','»',
		'¼','½','¾','¿','À','Á','Â','Ã','Ä','Å',
		'Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï',
		'Ð','Ñ','Ò','Ó','Ô','Õ','Ö','×','Ø','Ù',
		'Ú','Û','Ü','Ý','Þ','ß','à','á','â','ã',
		'ä','å','æ','ç','è','é','ê','ë','ì','í',
		'î','ï','ð','ñ','ò','ó','ô','õ','ö','÷',
		'ø','ù','ú','û','ü','ý','þ','ÿ'); 
	$xmlcode = array(
		'&amp;sharp138;','&amp;sharp146;','&amp;sharp150;','&amp;sharp154;',
		'&amp;sharp34;', '&amp;sharp60;', '&amp;sharp62;', '&amp;sharp161;','&amp;sharp162;','&amp;sharp163;','&amp;sharp164;','&amp;sharp165;','&amp;sharp166;','&amp;sharp167;',
		'&amp;sharp168;','&amp;sharp169;','&amp;sharp170;','&amp;sharp171;','&amp;sharp172;','&amp;sharp173;','&amp;sharp174;','&amp;sharp175;','&amp;sharp176;','&amp;sharp177;',
		'&amp;sharp178;','&amp;sharp179;','&amp;sharp180;','&amp;sharp181;','&amp;sharp182;','&amp;sharp183;','&amp;sharp184;','&amp;sharp185;','&amp;sharp186;','&amp;sharp187;',
		'&amp;sharp188;','&amp;sharp189;','&amp;sharp190;','&amp;sharp191;','&amp;sharp192;','&amp;sharp193;','&amp;sharp194;','&amp;sharp195;','&amp;sharp196;','&amp;sharp197;',
		'&amp;sharp198;','&amp;sharp199;','&amp;sharp200;','&amp;sharp201;','&amp;sharp202;','&amp;sharp203;','&amp;sharp204;','&amp;sharp205;','&amp;sharp206;','&amp;sharp207;',
		'&amp;sharp208;','&amp;sharp209;','&amp;sharp210;','&amp;sharp211;','&amp;sharp212;','&amp;sharp213;','&amp;sharp214;','&amp;sharp215;','&amp;sharp216;','&amp;sharp217;',
		'&amp;sharp218;','&amp;sharp219;','&amp;sharp220;','&amp;sharp221;','&amp;sharp222;','&amp;sharp223;','&amp;sharp224;','&amp;sharp225;','&amp;sharp226;','&amp;sharp227;',
		'&amp;sharp228;','&amp;sharp229;','&amp;sharp230;','&amp;sharp231;','&amp;sharp232;','&amp;sharp233;','&amp;sharp234;','&amp;sharp235;','&amp;sharp236;','&amp;sharp237;',
		'&amp;sharp238;','&amp;sharp239;','&amp;sharp240;','&amp;sharp241;','&amp;sharp242;','&amp;sharp243;','&amp;sharp244;','&amp;sharp245;','&amp;sharp246;','&amp;sharp247;',
		'&amp;sharp248;','&amp;sharp249;','&amp;sharp250;','&amp;sharp251;','&amp;sharp252;','&amp;sharp253;','&amp;sharp254;','&amp;sharp255;');
	$str = str_replace($char, $xmlcode, $str);
	return $str; 
}

// run this first
function xmlEntities($str) {
	$char = array("&amp;");
	$xslt = array('&amp;sharp38;');
	$str = str_replace($char, $xslt, $str); 

	$htmlchar = array(
	'&amp;Scaron;','&amp;rsquo;','&amp;ndash;','&amp;scaron;',
	'&amp;quot;','&amp;amp;','&amp;lt;','&amp;gt;','&amp;nbsp;','&amp;iexcl;','&amp;cent;','&amp;pound;','&amp;curren;','&amp;yen;',
	'&amp;brvbar;','&amp;sect;','&amp;uml;','&amp;copy;','&amp;ordf;','&amp;laquo;','&amp;not;','&amp;shy;','&amp;reg;','&amp;macr;',
	'&amp;deg;','&amp;plusmn;','&amp;sup2;','&amp;sup3;','&amp;acute;','&amp;micro;','&amp;para;','&amp;middot;','&amp;cedil;','&amp;sup1;',
	'&amp;ordm;','&amp;raquo;','&amp;frac14;','&amp;frac12;','&amp;frac34;','&amp;iquest;','&amp;Agrave;','&amp;Aacute;','&amp;Acirc;','&amp;Atilde;',
	'&amp;Auml;','&amp;Aring;','&amp;AElig;','&amp;Ccedil;','&amp;Egrave;','&amp;Eacute;','&amp;Ecirc;','&amp;Euml;','&amp;Igrave;','&amp;Iacute;',
	'&amp;Icirc;','&amp;Iuml;','&amp;ETH;','&amp;Ntilde;','&amp;Ograve;','&amp;Oacute;','&amp;Ocirc;','&amp;Otilde;','&amp;Ouml;','&amp;times;',
	'&amp;Oslash;','&amp;Ugrave;','&amp;Uacute;','&amp;Ucirc;','&amp;Uuml;','&amp;Yacute;','&amp;THORN;','&amp;szlig;','&amp;agrave;','&amp;aacute;',
	'&amp;acirc;','&amp;atilde;','&amp;auml;','&amp;aring;','&amp;aelig;','&amp;ccedil;','&amp;egrave;','&amp;eacute;','&amp;ecirc;','&amp;euml;',
	'&amp;igrave;','&amp;iacute;','&amp;icirc;','&amp;iuml;','&amp;eth;','&amp;ntilde;','&amp;ograve;','&amp;oacute;','&amp;ocirc;','&amp;otilde;',
	'&amp;ouml;','&amp;divide;','&amp;oslash;','&amp;ugrave;','&amp;uacute;','&amp;ucirc;','&amp;uuml;','&amp;yacute;','&amp;thorn;','&amp;yuml;');
	$xmlcode = array(
	'&amp;sharp138;','&amp;sharp146;','&amp;sharp150;','&amp;sharp154;',
	'&amp;sharp34;', '&amp;sharp38;', '&amp;sharp60;', '&amp;sharp62;', '&amp;sharp160;','&amp;sharp161;','&amp;sharp162;','&amp;sharp163;','&amp;sharp164;','&amp;sharp165;',
	'&amp;sharp166;','&amp;sharp167;','&amp;sharp168;','&amp;sharp169;','&amp;sharp170;','&amp;sharp171;','&amp;sharp172;','&amp;sharp173;','&amp;sharp174;','&amp;sharp175;',
	'&amp;sharp176;','&amp;sharp177;','&amp;sharp178;','&amp;sharp179;','&amp;sharp180;','&amp;sharp181;','&amp;sharp182;','&amp;sharp183;','&amp;sharp184;','&amp;sharp185;',
	'&amp;sharp186;','&amp;sharp187;','&amp;sharp188;','&amp;sharp189;','&amp;sharp190;','&amp;sharp191;','&amp;sharp192;','&amp;sharp193;','&amp;sharp194;','&amp;sharp195;',
	'&amp;sharp196;','&amp;sharp197;','&amp;sharp198;','&amp;sharp199;','&amp;sharp200;','&amp;sharp201;','&amp;sharp202;','&amp;sharp203;','&amp;sharp204;','&amp;sharp205;',
	'&amp;sharp206;','&amp;sharp207;','&amp;sharp208;','&amp;sharp209;','&amp;sharp210;','&amp;sharp211;','&amp;sharp212;','&amp;sharp213;','&amp;sharp214;','&amp;sharp215;',
	'&amp;sharp216;','&amp;sharp217;','&amp;sharp218;','&amp;sharp219;','&amp;sharp220;','&amp;sharp221;','&amp;sharp222;','&amp;sharp223;','&amp;sharp224;','&amp;sharp225;',
	'&amp;sharp226;','&amp;sharp227;','&amp;sharp228;','&amp;sharp229;','&amp;sharp230;','&amp;sharp231;','&amp;sharp232;','&amp;sharp233;','&amp;sharp234;','&amp;sharp235;',
	'&amp;sharp236;','&amp;sharp237;','&amp;sharp238;','&amp;sharp239;','&amp;sharp240;','&amp;sharp241;','&amp;sharp242;','&amp;sharp243;','&amp;sharp244;','&amp;sharp245;',
	'&amp;sharp246;','&amp;sharp247;','&amp;sharp248;','&amp;sharp249;','&amp;sharp250;','&amp;sharp251;','&amp;sharp252;','&amp;sharp253;','&amp;sharp254;','&amp;sharp255;');
	$str = str_replace($htmlchar, $xmlcode, $str); 
	// $str = str_ireplace($htmlchar, $xmlcode, $str); 
	return $str; 
}

To use, replace “sharp” to “#”.

You can add more characters as you need. Reference link: http://www.alanwood.net/demos/ansi.html