Convert lower to upper case for XML element without any attributes
Here should go questions about transforming XML with XSLT and FOP.
-
- Posts: 1
- Joined: Thu Jul 28, 2016 7:16 pm
Convert lower to upper case for XML element without any attributes
Post by sreejitnair »
Example XML:
No I am trying to transform to
so I am trying to convert the value of element without attribute to upper case, so if you see the element "title" is having attribute "lang", so the value for this element should not be converted to upper case.
I got anothe code bit from Oxygen but that is converting all value to upper case. I tried my best but not able to achieve what I want , so can you please help me or advice if at all it is possible?
Code I am using :
Thanks
Sreejit
Code: Select all
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book>
<title lang="in">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="children">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book>
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>
<book category="web">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
Code: Select all
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book>
<title lang="in">Everyday Italian</title>
<author>GIADA DE LAURENTIIS</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="children">
<title lang="en">Harry Potter</title>
<author>J K. ROWLING</author>
<year>2005</year>
<price>29.99</price>
</book>
<book>
<title lang="en">XQuery Kick Start</title>
<author>JAMES MCGOVERN</author>
<author>PER BOTHNER</author>
<author>KURT CAGLE</author>
<author>JAMES LINN</author>
<author>VAIDYANATHAN NAGARAJAN</author>
<year>2003</year>
<price>49.99</price>
</book>
<book category="web">
<title lang="en">Learning XML</title>
<author>ERIK T. RAY</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
I got anothe code bit from Oxygen but that is converting all value to upper case. I tried my best but not able to achieve what I want , so can you please help me or advice if at all it is possible?
Code I am using :
Code: Select all
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<xsl:variable name="smallCase" select="'abcdefghijklmnopqrstuvwxyz'"/>
<xsl:variable name="upperCase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
<!-- Match document -->
<xsl:template match="/">
<xsl:apply-templates mode="copy" select="."/>
</xsl:template>
<!-- Deep copy template -->
<xsl:template match="*|text()|@*" mode="copy">
<xsl:apply-templates mode="uppercase" select="."/>
</xsl:template>
<!-- Deep copy uppercase -->
<xsl:template match="*|@*" mode="uppercase">
<xsl:copy>
<xsl:apply-templates mode="uppercase" select="@*"/>
<xsl:apply-templates mode="uppercase"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()" mode="uppercase">
<xsl:value-of select="translate(., $smallCase, $upperCase)"/>
</xsl:template>
</xsl:stylesheet>
Sreejit
-
- Posts: 99
- Joined: Thu Oct 23, 2008 6:29 am
Re: Convert lower to upper case for XML element without any attributes
The reason this is not working is that you have a template match on text(). This will match on all text in your XML input, and it will not be overridden. You will need to do this a different way. Since you have a known set of nodes and attributes, I would suggest you limit your matches to those defined and not be so generic.
-
- Posts: 99
- Joined: Thu Oct 23, 2008 6:29 am
Re: Convert lower to upper case for XML element without any attributes
I simplified your XSLT quite a bit.
Try this:
Try this:
Code: Select all
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<xsl:output method="xml" encoding="UTF-8"/>
<xsl:variable name="smallCase" select="'abcdefghijklmnopqrstuvwxyz'"/>
<xsl:variable name="upperCase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="node()[not(@lang)]/text()">
<xsl:value-of select="translate(., $smallCase, $upperCase)"/>
</xsl:template>
</xsl:stylesheet>
Jump to
- Oxygen XML Editor/Author/Developer
- ↳ Feature Request
- ↳ Common Problems
- ↳ DITA (Editing and Publishing DITA Content)
- ↳ SDK-API, Frameworks - Document Types
- ↳ DocBook
- ↳ TEI
- ↳ XHTML
- ↳ Other Issues
- Oxygen XML Web Author
- ↳ Feature Request
- ↳ Common Problems
- Oxygen Content Fusion
- ↳ Feature Request
- ↳ Common Problems
- Oxygen JSON Editor
- ↳ Feature Request
- ↳ Common Problems
- Oxygen PDF Chemistry
- ↳ Feature Request
- ↳ Common Problems
- Oxygen Feedback
- ↳ Feature Request
- ↳ Common Problems
- Oxygen XML WebHelp
- ↳ Feature Request
- ↳ Common Problems
- XML
- ↳ General XML Questions
- ↳ XSLT and FOP
- ↳ XML Schemas
- ↳ XQuery
- NVDL
- ↳ General NVDL Issues
- ↳ oNVDL Related Issues
- XML Services Market
- ↳ Offer a Service