Subject: Re: [xsl] Identity transform (case conversion) From: George Cristian Bina <george@xxxxxxxxxxxxx> Date: Fri, 07 Jul 2006 20:41:41 +0300 |
You need the node-set extension I think. Change your template that matches elements like below:
<xsl:copy-of select="exslt:node-set($nsHolder)/test/namespace::*"/> <xsl:apply-templates select="@*"/> <xsl:apply-templates/> </xsl:element> </xsl:template>
and add xmlns:exslt="http://exslt.org/common" exclude-result-prefixes="exslt" on the stylesheet element.
Best Regards, George --------------------------------------------------------------------- George Cristian Bina <oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger http://www.oxygenxml.com
Hello All, I am trying to write a XSLT stylesheet (I am seeking both 1.0 and 2.0 solutions. If extensions are unavoidable, I can use them) which will take as input any XML document, and produce as output, a XML document which is an identity of the input (i.e. what is produced by the identity transform). But the condition is: all the letters (a-z) anywhere in source XML should change from small case to capitals.
for e.g.
this source XML:
<?xml version="1.0" ?> <!-- this is a comment --> <?pqr x="do-something" ?> <author xmlns:a="xyz" xmlns:b="pqr"> <person age="30"> by <FirstName>Jane</FirstName> <LastName>Doe</LastName>, </person> </author>
should transform to:
<?xml version="1.0" encoding="UTF-8"?> <!-- THIS IS A COMMENT --> <?PQR X="DO-SOMETHING" ?> <AUTHOR xmlns:A="XYZ" xmlns:B="PQR"> <PERSON AGE="30"> BY <FIRSTNAME>JANE</FIRSTNAME> <LASTNAME>DOE</LASTNAME>, </PERSON> </AUTHOR>
Here is my attempt:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:variable name="small" select="'abcdefghijklmnopqrstuvwxyz'" /> <xsl:variable name="caps" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
<xsl:template match="*"> <xsl:element name="{translate(name(), $small, $caps)}"> <xsl:copy-of select="current()//namespace::*" /> <xsl:apply-templates select="@*" /> <xsl:apply-templates /> </xsl:element> </xsl:template>
<xsl:template match="text()"> <xsl:value-of select="translate(., $small, $caps)" /> </xsl:template>
<xsl:template match="@*"> <xsl:attribute name="{translate(name(), $small, $caps)}"><xsl:value-of select="translate(., $small, $caps)" /></xsl:attribute> </xsl:template>
<xsl:template match="processing-instruction()"> <xsl:processing-instruction name="{translate(name(), $small, $caps)}"><xsl:value-of select="translate(., $small, $caps)" /></xsl:processing-instruction> </xsl:template>
<xsl:template match="comment()"> <xsl:comment><xsl:value-of select="translate(., $small, $caps)" /></xsl:comment> </xsl:template>
</xsl:stylesheet>
This stylesheet produces output:
<?xml version="1.0" encoding="UTF-8"?> <!-- THIS IS A COMMENT --> <?PQR X="DO-SOMETHING" ?> <AUTHOR xmlns:a="xyz" xmlns:b="pqr"> <PERSON AGE="30"> BY <FIRSTNAME>JANE</FIRSTNAME> <LASTNAME>DOE</LASTNAME>, </PERSON> </AUTHOR>
Everything else is fine, except the namespace handling. Their case is not getting converted. What needs to be done for this?
Another questions is: The above output gets produced identically by Saxon 8.7.3 and MSXML 4.0. But with Xalan-J 2.7.0, namespaces are not getting generated in the output.
Xalan produces output:
<?xml version="1.0" encoding="UTF-8"?> <!-- THIS IS A COMMENT --> <?PQR X="DO-SOMETHING" ?>
<AUTHOR> <PERSON AGE="30"> BY <FIRSTNAME>JANE</FIRSTNAME> <LASTNAME>DOE</LASTNAME>, </PERSON> </AUTHOR>
Is this a Xalan bug?
Regards, Mukul
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Identity transform (case conv, Mukul Gandhi | Thread | Re: [xsl] Identity transform (case , Mukul Gandhi |
[xsl] Selecting all repeated elemen, Jason Foster | Date | Re: [xsl] Identity transform (case , Mukul Gandhi |
Month |