Subject: Re: [xsl] problem with transforming mixed content From: "Wolfhart Totschnig wolfhart.totschnig@xxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Sat, 15 Aug 2020 05:25:36 -0000 |
Thank you very much, Graydon and Dimitre, for your replies! Your solutions work very well and deepened my understanding of XSLT. There is just one little problem I encountered: The data of the external source comes in a particular namespace. Since I do not want to have the namespace declaration in the output, I use @exclude-result-prefixes in the <xsl:stylesheet> element, which works as expected for the rest of the output produced by my stylesheet and also for the <title> and <subtitle> elements produced by your solutions. However, on the <i> elements, the namespace declaration suddenly shows up, which baffles me. Do you know why that is? And how do I get rid of it? Best, Wolfhart On 14.08.20 23:08, Dimitre Novatchev dnovatchev@xxxxxxxxx wrote: > XSLT 2.0: > > <xsl:stylesheet version="2.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> > B <xsl:output omit-xml-declaration="yes" indent="yes"/> > > B B <xsl:template match="node()|@*" mode="copy-lowercase"> > B B <xsl:copy> > B B B <xsl:apply-templates select="node()|@*" mode="#current"/> > B B </xsl:copy> > B </xsl:template> > > B <xsl:template match="title/text()[contains(., ':')]"> > B B <title> > B B B <xsl:apply-templates select="preceding-sibling::node()" > mode="copy-lowercase"/> > B B B <xsl:copy-of select="lower-case(substring-before(., ':'))"/> > B B </title> > B B <subtitle> > B B B <xsl:copy-of select="lower-case(substring-after(., ':'))"/> > B B B <xsl:apply-templates select="following-sibling::node()" > mode="copy-lowercase"/> > B B </subtitle> > B </xsl:template> > > B <xsl:template match="text()"/> > > B <xsl:template match="title//text()" > mode="copy-lowercase"><xsl:value-of > select="lower-case(.)"/></xsl:template> > </xsl:stylesheet> > > When applied on the provided XML document: > > <title>THE TITLE OF THE BOOK WITH SOME > B B <i>ITALICS</i> AND SOME MORE > WORDS: THE SUBTITLE OF THE BOOK WITH SOME > B B <i>ITALICS</i> > </title> > > the wanted result is produced: > > <title>the title of the book with some > <i>italics</i> and some more > words</title> > <subtitle> the subtitle of the book with some > <i>italics</i> > </subtitle> > > B -- > Cheers, > Dimitre Novatchev > > > On Fri, Aug 14, 2020 at 7:16 PM Wolfhart Totschnig > wolfhart.totschnig@xxxxxxxxxxx <mailto:wolfhart.totschnig@xxxxxxxxxxx> > <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx > <mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>> wrote: > > Dear list, > > I would like to ask for your help with the following mixed-content > problem. I am receiving, from an external source, data in the > following > form: > > <title>THE TITLE OF THE BOOK WITH SOME <i>ITALICS</i> AND SOME MORE > WORDS: THE SUBTITLE OF THE BOOK WITH SOME <i>ITALICS</i></title> > > What I would like to do is > 1) separate the title from the subtitle (i.e., divide the data at the > colon) and put each in a separate element node; > 2) all the while maintaining the <i> markup; > 3) and perform certain string manipulations on all of the text nodes; > for the purposes of this post, I will use the example of converting > upper-case to lower-case. > > So the desired output is the following: > > <title>the title of the book with some <i>italics</i> and some more > words</title> > <subtitle>the subtitle of the book with some <i>italics</i></subtitle> > > How can this be done? > > I know that I can perform string manipulations while maintaining > the <i> > markup with templates, i.e., <xsl:template match="text()"/> and > <xsl:template match="i"/>. But in this case I do not know how to > divide > the data at the colon. And I know that I can divide the data at the > colon with <xsl:value-of select="substring-before(.,': ')"/>, but > then I > loose the <i> markup. So I am at a loss. > > Thanks in advance for your help! > Wolfhart > > > > XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list> > EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/2652055> > (by email <>)
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] problem with transforming, Dimitre Novatchev dn | Thread | Re: [xsl] problem with transforming, Imsieke, Gerrit, le- |
Re: [xsl] problem with transforming, Dimitre Novatchev dn | Date | Re: [xsl] problem with transforming, Imsieke, Gerrit, le- |
Month |