Subject: [xsl] FW: Xslt that worked for fop0.20.2 no longer works at later versions From: "Hesselberth, Jan" <Jan.Hesselberth@xxxxxxxxxxxxxxxxxx> Date: Wed, 23 Apr 2008 08:59:31 +0100 |
-----Original Message----- From: Hesselberth, Jan Sent: 22 April 2008 14:59 To: 'xsl-list@xxxxxxxxxxxxxxxxxxxxxx' Subject: Xslt that worked for fop0.20.2 no longer works at later versions I have xslt that transforms xml to pdf at fop 0.20.2 correctly. I am trying to upgrade to a later version of fop and have found that the conversion to .fo no longer works correctly for locally declared xsl:variable. Is this a bug or a change of design. Either way how can I change my xsl to produce the correct output. I have attached the xml and xsl and a correct pdf. Regards Jan Hesselberth This is the XSl <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:java="http://xml.apache.org/xslt/java" exclude-result-prefixes="java" version="1.0"> <!--xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" version="2.0"--> <xsl:variable name="followingSPV" select="aa"/> <xsl:variable name="lastacc" select="'last'"/> <xsl:variable name="lastSPV" select="'last'"/> <xsl:output method="xml" version="4.0" omit-xml-declaration="yes" indent="yes"/> <xsl:template match="moveAssetBatchResults"> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> <fo:layout-master-set> <fo:simple-page-master master-name="AssetMovement_portrait" page-height="29.7cm" page-width="21cm" margin-top="1cm" margin-bottom="2cm" margin-left="1cm" margin-right="1cm"> <fo:region-body margin-top="2cm"/> <fo:region-before extent="2cm"/> <!--fo:region-after extent="1.5cm"/--> </fo:simple-page-master> <fo:simple-page-master master-name="AssetMovement_landscape" page-height="21cm" page-width="29.7cm" margin-top="1cm" margin-bottom="2cm" margin-left="1cm" margin-right="1cm"> <fo:region-body margin-top="2cm"/> <fo:region-before extent="2cm"/> <!--fo:region-after extent="1.5cm"/--> </fo:simple-page-master> <fo:page-sequence-master master-name="AssetMovement"> <!-- fop 0.20.2 fo:repeatable-page-master-reference master-name="AssetMovement_landscape"/--> <fo:repeatable-page-master-reference master-reference="AssetMovement_landscape"/> </fo:page-sequence-master> <fo:page-sequence-master master-name="Exceptions"> <!-- fop 0.20.2 fo:repeatable-page-master-reference master-name="AssetMovement_landscape"/--> <fo:repeatable-page-master-reference master-reference="AssetMovement_landscape"/> </fo:page-sequence-master> </fo:layout-master-set> <!-- fop 0.20.2 fo:page-sequence master-name="AssetMovement" initial-page-number="1"--> <fo:page-sequence master-reference="AssetMovement" initial-page-number="1"> <fo:static-content flow-name="xsl-region-before"> <xsl:call-template name="ReportHead1"/> <xsl:call-template name="ColumnHead1"/> </fo:static-content> <fo:flow flow-name="xsl-region-body"> <xsl:choose> <xsl:when test="/descendant::property[@type='MoveAssetSuccess']"> <xsl:call-template name="assetResults"/> </xsl:when> <xsl:otherwise> <fo:block>NO ACCOUNTS TAKEN ON</fo:block> </xsl:otherwise> </xsl:choose> </fo:flow> </fo:page-sequence> <!-- fop 0.20.2 fo:page-sequence master-name="Exceptions" initial-page-number="1"--> <fo:page-sequence master-reference="Exceptions" initial-page-number="1"> <fo:static-content flow-name="xsl-region-before"> <xsl:call-template name="ReportHead2"/> <xsl:call-template name="ColumnHead2"/> </fo:static-content> <fo:flow flow-name="xsl-region-body"> <xsl:call-template name="Exceptions"/> </fo:flow> </fo:page-sequence> </fo:root> </xsl:template> <xsl:template name="ReportHead1"> <xsl:param name="Style" select="'tITLE'"/> <fo:table> <fo:table-column column-width="12cm"/> <fo:table-column column-width="3cm"/> <fo:table-column column-width="3cm"/> <fo:table-body> <fo:table-row> <fo:table-cell> <fo:block font-size="10pt" font-weight="bold" text-align="left"> <xsl:text>Movement Report</xsl:text> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block font-size="10pt" font-weight="bold" text-align="end"> <xsl:value-of select="java:format(java:java.text.SimpleDateFormat.new ('d/MM/yyyy'), java:java.util.Date.new())"/> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block line-height="14pt" font-size="10pt" font-weight="bold" text-align="end">Page <fo:page-number/> </fo:block> </fo:table-cell> </fo:table-row> </fo:table-body> </fo:table> </xsl:template> <xsl:template name="ReportHead2"> <xsl:param name="Style" select="'tITLE'"/> <fo:table> <fo:table-column column-width="12cm"/> <fo:table-column column-width="3cm"/> <fo:table-column column-width="3cm"/> <fo:table-body> <fo:table-row> <fo:table-cell> <fo:block font-size="10pt" font-weight="bold" text-align="left"> <xsl:text>Summary Account Exceptions</xsl:text> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block font-size="10pt" font-weight="bold" text-align="end"> <xsl:value-of select="java:format(java:java.text.SimpleDateFormat.new ('d/MM/yyyy'), java:java.util.Date.new())"/> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block line-height="14pt" font-size="10pt" font-weight="bold" text-align="end">Page <fo:page-number/> </fo:block> </fo:table-cell> </fo:table-row> </fo:table-body> </fo:table> </xsl:template> <xsl:template name="ColumnHead1"> <fo:table space-after="10pt"> <fo:table-column column-width="3.5cm" border-after-style="solid" border-after-width="1pt" border-top-style="solid" border-top-width="1pt"/> <fo:table-column column-width="2cm" border-after-style="solid" border-after-width="1pt" border-top-style="solid" border-top-width="1pt"/> <fo:table-column column-width="3cm" border-after-style="solid" border-after-width="1pt" border-top-style="solid" border-top-width="1pt"/> <fo:table-column column-width="3cm" border-after-style="solid" border-after-width="1pt" border-top-style="solid" border-top-width="1pt"/> <fo:table-column column-width="3cm" border-after-style="solid" border-after-width="1pt" border-top-style="solid" border-top-width="1pt"/> <fo:table-column column-width="6cm" border-after-style="solid" border-after-width="1pt" border-top-style="solid" border-top-width="1pt"/> <fo:table-body> <fo:table-row> <fo:table-cell> <fo:block text-align="left" font-family="sans-serif" line-height="14pt" font-size="10pt" font-weight="bold"> Account No </fo:block> </fo:table-cell> <fo:table-cell> <fo:block text-align="center" font-family="sans-serif" line-height="14pt" font-size="10pt" font-weight="bold"> Element </fo:block> </fo:table-cell> <fo:table-cell> <fo:block text-align="end" font-family="sans-serif" line-height="14pt" font-size="10pt" font-weight="bold"> Current Balance </fo:block> </fo:table-cell> <fo:table-cell> <fo:block text-align="end" font-family="sans-serif" line-height="14pt" font-size="10pt" font-weight="bold"> Capital Balance </fo:block> </fo:table-cell> <fo:table-cell> <fo:block text-align="center" font-family="sans-serif" line-height="14pt" font-size="10pt" font-weight="bold"> Interest (RO to Date) </fo:block> </fo:table-cell> <fo:table-cell> <fo:block text-align="center" font-family="sans-serif" line-height="14pt" font-size="10pt" font-weight="bold"> Element Exceptions </fo:block> </fo:table-cell> </fo:table-row> </fo:table-body> </fo:table> </xsl:template> <xsl:template name="ColumnHead2"> <fo:table space-after="10pt"> <fo:table-column column-width="2.5cm" border-after-style="solid" border-after-width="1pt" border-top-style="solid" border-top-width="1pt"/> <fo:table-column column-width="2cm" border-after-style="solid" border-after-width="1pt" border-top-style="solid" border-top-width="1pt"/> <fo:table-column column-width="3cm" border-after-style="solid" border-after-width="1pt" border-top-style="solid" border-top-width="1pt"/> <fo:table-body> <fo:table-row> <fo:table-cell> <fo:block text-align="left" font-family="sans-serif" line-height="14pt" font-size="10pt" font-weight="bold"> Account No </fo:block> </fo:table-cell> <fo:table-cell> <fo:block text-align="center" font-family="sans-serif" line-height="14pt" font-size="10pt" font-weight="bold"> Request </fo:block> </fo:table-cell> <fo:table-cell> <fo:block text-align="end" font-family="sans-serif" line-height="14pt" font-size="10pt" font-weight="bold"> Exception </fo:block> </fo:table-cell> </fo:table-row> </fo:table-body> </fo:table> </xsl:template> <xsl:template name="assetResults"> <xsl:for-each select="//property[@type='MoveAssetSuccess']"> <xsl:sort select="./property[@name='sourceSPV']" data-type="text" order="ascending"/> <xsl:sort select="./property[@name='targetSPV']" data-type="text" order="ascending"/> <xsl:sort select="concat(substring(property[@name='mfAccNo'],1,5),substring(proper ty[@name='mfAccNo'],8,5),substring(property[@name='mfAccNo'],6,2))"/> <fo:table space-after="10pt"> <fo:table-column column-width="3.5cm"/> <fo:table-column column-width="2cm"/> <fo:table-column column-width="3cm"/> <fo:table-column column-width="3cm"/> <fo:table-column column-width="3cm"/> <fo:table-column column-width="6cm"/> <fo:table-body> <xsl:variable name="spv" select="concat(./property[@name='sourceSPV'],./property[@name='targetSPV '])"/> <xsl:choose> <xsl:when test="position()=1"> <fo:table-row keep-together="always"> <fo:table-cell> <fo:block text-align="left" font-family="sans-serif" line-height="14pt" font-size="10pt" font-weight="bold"> <xsl:text>From: </xsl:text><xsl:value-of select="./property[@name='sourceSPV']"/> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block text-align="left" font-family="sans-serif" line-height="14pt" font-size="10pt" font-weight="bold"> <xsl:text>To: </xsl:text><xsl:value-of select="./property[@name='targetSPV']"/> </fo:block> </fo:table-cell> </fo:table-row> </xsl:when> <xsl:otherwise> <xsl:if test="concat(./property[@name='sourceSPV'],./property[@name='targetSPV'] ) != $lastSPV"> <fo:table-row keep-together="always"> <fo:table-cell> <fo:block space-before.optimum="5pt" space-after.optimum="5pt" font-size="10pt" text-align="left" border-after-style="solid" border-after-width="1pt" border-top-style="solid" border-top-width="1pt"> Total Movement </fo:block> </fo:table-cell> <fo:table-cell> <fo:block space-before.optimum="5pt" space-after.optimum="5pt" font-size="10pt" text-align="right" border-after-style="solid" border-after-width="1pt" border-top-style="solid" border-top-width="1pt"> Acct: <xsl:value-of select="count(ancestor::moveAssetBatchResults/descendant::property[$last SPV=concat(./property[@name='sourceSPV'],./property[@name='targetSPV'])] )"/> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block space-before.optimum="5pt" space-after.optimum="5pt" font-size="10pt" text-align="right" border-after-style="solid" border-after-width="1pt" border-top-style="solid" border-top-width="1pt"> <xsl:value-of select="format-number(sum(ancestor::moveAssetBatchResults/descendant::pr operty[$lastSPV=concat(./property[@name='sourceSPV'],./property[@name='t argetSPV'])]/property[@name='currentBalance']),'#,.00')"/> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block space-before.optimum="5pt" space-after.optimum="5pt" font-size="10pt" text-align="right" border-after-style="solid" border-after-width="1pt" border-top-style="solid" border-top-width="1pt"> <xsl:value-of select="format-number(sum(ancestor::moveAssetBatchResults/descendant::pr operty[$lastSPV=concat(./property[@name='sourceSPV'],./property[@name='t argetSPV'])]/property[@name='capitalBalance']),'#,.00')"/> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block space-before.optimum="5pt" space-after.optimum="5pt" font-size="10pt" text-align="right" border-after-style="solid" border-after-width="1pt" border-top-style="solid" border-top-width="1pt"> <xsl:value-of select="format-number(sum(ancestor::moveAssetBatchResults/descendant::pr operty[$lastSPV=concat(./property[@name='sourceSPV'],./property[@name='t argetSPV'])]/property[@name='interestROToDate']),'#,.00')"/> </fo:block> </fo:table-cell> </fo:table-row> <fo:table-row break-before="page"> <fo:table-cell> <fo:block text-align="left" font-family="sans-serif" line-height="14pt" font-size="10pt" font-weight="bold"> <xsl:text>From: </xsl:text><xsl:value-of select="./property[@name='sourceSPV']"/> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block text-align="left" font-family="sans-serif" line-height="14pt" font-size="10pt" font-weight="bold"> <xsl:text>To: </xsl:text><xsl:value-of select="./property[@name='targetSPV']"/> </fo:block> </fo:table-cell> </fo:table-row> </xsl:if> </xsl:otherwise> </xsl:choose> <!--fo:table-row keep-with-previous="always"--> <!--fo:table-cell keep-with-previous="always"> <fo:block space-before.optimum="5pt" space-after.optimum="5pt" font-size="10pt" text-align="left"> <xsl:apply-templates select="./property[@name='mfAccNo']"/> </fo:block> </fo:table-cell> </fo:table-row--> <xsl:for-each select="descendant::property[@type='AccountElementFinancialInformationVO ']"> <xsl:variable name="elementNo" select="./property[@name='accountElementNumber']"/> <fo:table-row keep-together="always"> <fo:table-cell> <xsl:if test="ancestor::property[@type='MoveAssetSuccess']/descendant::property[ @name='mfAccNo'] != $lastacc"> <fo:block space-before.optimum="5pt" space-after.optimum="5pt" font-size="10pt" text-align="left"> <xsl:apply-templates select="ancestor::property[@type='MoveAssetSuccess']/descendant::propert y[@name='mfAccNo']"/> </fo:block> </xsl:if> </fo:table-cell> <!--fo:table-row keep-with-previous="always"> <fo:table-cell> </fo:table-cell--> <fo:table-cell> <fo:block space-before.optimum="5pt" space-after.optimum="5pt" font-size="10pt" text-align="right"> <xsl:value-of select="$elementNo"/> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block space-before.optimum="5pt" space-after.optimum="5pt" font-size="10pt" text-align="right"> <xsl:choose> <xsl:when test="contains(./property[@name='currentBalance'],'E')">0.00</xsl:when> <xsl:otherwise> <xsl:value-of select="format-number(translate(./property[@name='currentBalance'],'- ;.','-.'),'#,.00')"/> </xsl:otherwise> </xsl:choose> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block space-before.optimum="5pt" space-after.optimum="5pt" font-size="10pt" text-align="right"> <xsl:choose> <xsl:when test="contains(./property[@name='capitalBalance'],'E')">0.00</xsl:when> <xsl:otherwise> <xsl:value-of select="format-number(translate(./property[@name='capitalBalance'],'- ;.','-.'),'#,.00')"/> </xsl:otherwise> </xsl:choose> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block space-before.optimum="5pt" space-after.optimum="5pt" font-size="10pt" text-align="right"> <xsl:choose> <xsl:when test="contains(./property[@name='accruedInterest'],'E')">0.00</xsl:when> <xsl:when test="./property[@name='accruedInterest'][@type='null']">0.00</xsl:when> <xsl:otherwise> <xsl:value-of select="format-number(translate(./property[@name='accruedInterest'],' 5;.','-.'),'#,.00')"/> </xsl:otherwise> </xsl:choose> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block text-indent="3em" space-before.optimum="5pt" space-after.optimum="5pt" font-size="10pt" text-align="left"> <xsl:for-each select="ancestor::property[@type='MoveAssetSuccess']/descendant::propert y[@type='SecuritisationProcessErrorVO']"> <xsl:if test="./property[@name='accountElementNumber']= $elementNo"> <xsl:value-of select="./property[@name='errorText']"/> </xsl:if> </xsl:for-each> </fo:block> </fo:table-cell> </fo:table-row> <xsl:variable name="lastacc" select="ancestor::property[@type='MoveAssetSuccess']/descendant::propert y[@name='mfAccNo']"/> </xsl:for-each> <fo:table-row keep-together="always"> <fo:table-cell> </fo:table-cell> <fo:table-cell> <fo:block space-before.optimum="5pt" space-after.optimum="5pt" font-size="10pt" text-align="right"> Total </fo:block> </fo:table-cell> <fo:table-cell> <fo:block space-before.optimum="5pt" space-after.optimum="5pt" font-size="10pt" text-align="right" border-after-style="solid" border-after-width="1pt" border-top-style="solid" border-top-width="1pt"> <xsl:choose> <xsl:when test="contains(./property[@name='currentBalance'],'E')">0.00</xsl:when> <xsl:otherwise> <xsl:value-of select="format-number(translate(./property[@name='currentBalance'],'- ;.','-.'),'#,.00')"/> </xsl:otherwise> </xsl:choose> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block space-before.optimum="5pt" space-after.optimum="5pt" font-size="10pt" text-align="right" border-after-style="solid" border-after-width="1pt" border-top-style="solid" border-top-width="1pt"> <xsl:choose> <xsl:when test="contains(./property[@name='capitalBalance'],'E')">0.00</xsl:when> <xsl:otherwise> <xsl:value-of select="format-number(translate(./property[@name='capitalBalance'],'- ;.','-.'),'#,.00')"/> </xsl:otherwise> </xsl:choose> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block space-before.optimum="5pt" space-after.optimum="5pt" font-size="10pt" text-align="right" border-after-style="solid" border-after-width="1pt" border-top-style="solid" border-top-width="1pt"> <xsl:choose> <xsl:when test="contains(./property[@name='interestROToDate'],'E')">0.00</xsl:when > <xsl:otherwise> <xsl:value-of select="format-number(translate(./property[@name='interestROToDate'],'&# 45;.','-.'),'#,.00')"/> </xsl:otherwise> </xsl:choose> </fo:block> </fo:table-cell> </fo:table-row> <!--xsl:variable name="spv" select="concat(./property[@name='sourceSPV'],./property[@name='targetSPV '])"/--> <xsl:if test="position() = last()"> <fo:table-row keep-together="always"> <fo:table-cell> <fo:block space-before.optimum="5pt" space-after.optimum="5pt" font-size="10pt" text-align="left" border-after-style="solid" border-after-width="1pt" border-top-style="solid" border-top-width="1pt"> Total Movement </fo:block> </fo:table-cell> <fo:table-cell> <fo:block space-before.optimum="5pt" space-after.optimum="5pt" font-size="10pt" text-align="right" border-after-style="solid" border-after-width="1pt" border-top-style="solid" border-top-width="1pt"> Acct: <xsl:value-of select="count(ancestor::moveAssetBatchResults/descendant::property[$spv= concat(./property[@name='sourceSPV'],./property[@name='targetSPV'])])"/> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block space-before.optimum="5pt" space-after.optimum="5pt" font-size="10pt" text-align="right" border-after-style="solid" border-after-width="1pt" border-top-style="solid" border-top-width="1pt"> <xsl:value-of select="format-number(sum(ancestor::moveAssetBatchResults/descendant::pr operty[$spv=concat(./property[@name='sourceSPV'],./property[@name='targe tSPV'])]/property[@name='currentBalance']),'#,.00')"/> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block space-before.optimum="5pt" space-after.optimum="5pt" font-size="10pt" text-align="right" border-after-style="solid" border-after-width="1pt" border-top-style="solid" border-top-width="1pt"> <xsl:value-of select="format-number(sum(ancestor::moveAssetBatchResults/descendant::pr operty[$spv=concat(./property[@name='sourceSPV'],./property[@name='targe tSPV'])]/property[@name='capitalBalance']),'#,.00')"/> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block space-before.optimum="5pt" space-after.optimum="5pt" font-size="10pt" text-align="right" border-after-style="solid" border-after-width="1pt" border-top-style="solid" border-top-width="1pt"> <xsl:value-of select="format-number(sum(ancestor::moveAssetBatchResults/descendant::pr operty[$spv=concat(./property[@name='sourceSPV'],./property[@name='targe tSPV'])]/property[@name='interestROToDate']),'#,.00')"/> </fo:block> </fo:table-cell> </fo:table-row> </xsl:if> </fo:table-body> </fo:table> <xsl:variable name="lastSPV" select="concat(./property[@name='sourceSPV'],./property[@name='targetSPV '])"/> <xsl:variable name="followingSPV" select="concat(following::property[@name='sourceSPV'],following::propert y[@name='targetSPV'])"/> </xsl:for-each> </xsl:template> <xsl:template name="Exceptions"> <fo:table break-after="auto" space-after="10pt" border-after-style="solid" border-after-width="1pt"> <fo:table-column column-width="2.5cm"/> <fo:table-column column-width="3cm"/> <fo:table-column column-width="10cm"/> <fo:table-body> <xsl:for-each select="//property[@type='MoveAssetFailure']"> <xsl:sort select="./property[@name='sourceSPV']" data-type="text" order="ascending"/> <fo:table-row keep-with-previous="always"> <fo:table-cell keep-with-previous="always"> <fo:block text-align="left" font-family="sans-serif" line-height="14pt" font-size="10pt"> <xsl:value-of select="descendant::property[@name='accountNo']"/> </fo:block> </fo:table-cell> <fo:table-cell keep-with-previous="always"> <fo:block text-align="center" font-family="sans-serif" line-height="14pt" font-size="10pt"> <xsl:value-of select="descendant::property[@name='movement']"/> </fo:block> </fo:table-cell> <fo:table-cell keep-with-previous="always"> <fo:block text-align="left" font-family="sans-serif" line-height="14pt" font-size="10pt"> <xsl:value-of select="./property[@name='errorMessage']"/> </fo:block> </fo:table-cell> </fo:table-row> </xsl:for-each> </fo:table-body> </fo:table> </xsl:template> </xsl:stylesheet> LEGAL NOTICE The information contained in this e-mail and any attachments are private and confidential. This message is solely intended for a particular recipient, if you are not the intended recipient you are prohibited from storing, copying, disseminating or using the information in any way. If you received this e-mail in error please notify the sender immediately. E-mail transmission cannot be guaranteed to be secure or error-free as information could be intercepted, corrupted, lost, destroyed, arrive late or incomplete, or contain viruses. The sender therefore does not accept liability for any errors, viruses or omissions in the contents of this message, which arise as a result of transmission. This e-mail is not intended to create legally binding commitments on behalf of Northern Rock plc, nor do its contents reflect the corporate views or policies of Northern Rock plc. Northern Rock plc, Registered Office Northern Rock House Gosforth Newcastle upon Tyne NE3 4PL. Registered in England, number 3273685. Telephone No: 0191 2857191 Northern Rock plc is authorised and regulated by the Financial Services Authority for deposit-taking; advising on and arranging mortgages and general insurance; and for introducing life assurance and investments. ______________________________________________________________________ This email has been scanned by the MessageLabs Email Security System. For more information please visit http://www.messagelabs.com/email ______________________________________________________________________
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Force Unicode change, Pankaj Chaturvedi | Thread | RE: [xsl] FW: Xslt that worked for , Michael Kay |
[xsl] Force Unicode change, Pankaj Chaturvedi | Date | RE: [xsl] FW: Xslt that worked for , Michael Kay |
Month |