Subject: AW: [xsl] Replacing all Occurences of a String From: "Roger" <roger@xxxxxxxx> Date: Fri, 31 Aug 2001 15:39:46 +0200 |
Hi Now I have the following: "duplicit rule name 'do-replace'" Can't we call the 'do-replace' template in the process-template, is this the problem? And additional question is: Do I have to include this xsl-file in the main-file or could I also use it in a subordinate-file, like the FilmDetails.xsl (see below): I would like to do this: filmausgabe.xsl calls FilmDetails.xsl calls replace.xsl calls replace.xml but now I do this: filmausgabe.xsl calls directly replace.xsl To use replace.xsl "telquel" I had to include it directly in filmausgabe.xsl. Now it goes through all textnodes. I only would need it in sfzRelease, sfzProdjahr, sfzSprache, sfzUntertitel, because only there I have to do the english-to-german translation. Could I also do something like this in the replace.xsl to restrain the textnodes hanging under the elements. Or how could I call these textnodes underneath the elements sfzRelease, sfzProdjahr, sfzSprache, sfzUntertitel? <xsl:template match="text()"> <xsl:call-template name="process"> <xsl:with-param name="text" select="sfzRelease | sfzProdjahr | sfzSprache | sfzUntertitel"/> <xsl:with-param name="replacements" select="document('replace.xml')/replacements/replacement"/> </xsl:call-template> </xsl:template> I attached the XML once again, after the replace.xsl The XSL looks as follows, as suggested by J. Pietschmann: replace.xsl <xsl:template name="do-replace"> <xsl:param name="text"/> <xsl:param name="replace"/> <xsl:param name="by"/> <xsl:choose> <xsl:when test="contains($text,$replace)"> <xsl:value-of select="substring-before($text, $replace)"/> <xsl:value-of select="$by"/> <xsl:call-template name="do-replace"> <xsl:with-param name="text" select="substring-after($text, $replace)"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="$text"/> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template match="*"> <xsl:copy> <xsl:copy-of select="@*"/> <xsl:apply-templates/> </xsl:copy> </xsl:template> <xsl:template match="text()"> <xsl:call-template name="process"> <xsl:with-param name="text" select="."/> <xsl:with-param name="replacements" select="document('replace.xml')/replacements/replacement"/> </xsl:call-template> </xsl:template> <xsl:template name="process"> <xsl:param name="text"/> <xsl:param name="replacements"/> <xsl:choose> <xsl:when test="replacements"> <xsl:call-template name="process"> <xsl:with-param name="text"> <xsl:call-template name="do-replace"> <xsl:with-param name="text" select="$text"/> <xsl:with-param name="replace" select="$replacements[1]/from"/> <xsl:with-param name="by" select="$replacements[1]/to"/> </xsl:call-template> </xsl:with-param> <xsl:with-param name="replacements" select="$replacements[position() > 1]"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="$text"/> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet> The XML: ?xml version="1.0"?> <iba> <querystring type="resultset"> <path>filmausgabe.html/D20</path> </querystring> <page type="resultset"> <Section type="row" ID="Section1"> <ID>1</ID> <lang>de</lang> <title>Filmindex Schweiz</title> <uri>filmindex_schweiz</uri> <sectioninfo> <keywordset/> <abstract/> </sectioninfo> <foreignsectionid>0</foreignsectionid> <created>0000-00-00 00:00:00</created> <createdby>Roger Fischer</createdby> <changed>20010703180309</changed> <changedby/> <l>0</l> <r>0</r> <Page type="row" ID="Page1"> <ID>1</ID> <lang>de</lang> <title>Filmausgabe</title> <uri>filmausgabe.html</uri> <pageinfo> <keywordset>Schweizer Film, Film-Index, Schweizer Film Datenbank</keywordset> <abstract/> </pageinfo> <xslt>filmausgabe.xsl</xslt> <foreignsectionid>1</foreignsectionid> <active>1</active> <created>0000-00-00 00:00:00</created> <createdby>Roger Fischer</createdby> <changed>20010704152338</changed> <changedby>Roger Fischer</changedby> <Document type="row" selected="selected" ID="Document20"> <ID>20</ID> <lang/> <title>A l'est des rêves</title> <abstract/> <documentinfo> <keywordset/> </documentinfo> <created>0000-00-00 00:00:00</created> <createdby/> <changed>20010824105615</changed> <changedby/> <Film type="row" ID="Film111997539"> <ID>111997539</ID> <lang>de</lang> <sfzTitel>A l'est des rêves</sfzTitel> <sfzSubtitel/> <sfzProdjahr/> <sfzRelease>May 2000</sfzRelease> <sfzFormat>Digital Beta</sfzFormat> <sfzFarbe>1</sfzFarbe> <sfzDauer>50</sfzDauer> <sfzSprache>Russian</sfzSprache> <sfzUntertitel>French and English</sfzUntertitel> <sfzKategorie>2</sfzKategorie> <objectname>Film</objectname> <created>0000-00-00 00:00:00</created> <createdby>someone</createdby> <changed>20010704163147</changed> <changedby>someone</changedby> </Film> <Article type="row" ID="Article171"> <ID>171</ID> <lang>de</lang> <title>A l'est des rêves</title> <subtitle>Luc Peter</subtitle> <articleinfo> <author> <name>Doris Senn</name> <email> <ulink/> </email> <website> <ulink/> </website> </author> <date>2001-08-22</date> <editor> <name>Meret Ernst</name> </editor> <publisher> <publishername>Chronos Verlag, Zürich</publishername> </publisher> <copyright> <year>2000</year> <holder>Doris Senn</holder> </copyright> <keywordset>Cinema 46, Schweizer Film</keywordset> <pagenum>225 f.</pagenum> </articleinfo> <abstract/> <main> <para> «Feinde - Ich bin von Feinden umgeben...» Die achtzigjährige Klawdia Mamykina sitzt in ihrem geblümten Morgenmantel am Frühstückstisch, schluchzt in die Kamera, verwirft die Hände. Nur um sich wenig später die Augen zu reiben und zu erklären: «An dieser Stelle klopft jemand, ich sitze allein auf einem Thron und habe meinen Text vergessen. So endete meine Karriere in der Blüte meiner Jahre. Mein Gedächtnis hat mich im Stich gelassen...» </para> <para>Die ehemalige Theaterschauspielerin lebt im Altersheim «Savina», das seit rund einem Jahrhundert seine Türen für VertreterInnen der darstellenden Kunst offen hält: Tänzer, Sängerinnen, Regisseure und Schauspielerinnen können hier ihren Lebensabend verbringen. Das in neoklassizistischem Stil erbaute Herrschaftshaus bietet rund hundert Insassen ein Zuhause, das ihnen weit gehende Autonomie belässt. In einem grossen Park auf einer Flussinsel nahe Sankt Petersburg gelegen, erzählt das Haus - wie seine BewohnerInnen - mit zurückhaltender Vornehmheit von anderen Zeiten. </para> <para>Die Russlandkennerin Thérèse Obrecht und der Dokumentarfilmer Luc Peter porträtieren in A l'est des rêves fünf der Heimbewohner und lassen sie schwelgen in ihren Erinnerungen. Alte Fotos werden herausgesucht, auf denen die einstige Schönheit wie ein ferner Schatz bestaunt wird. «Ein gut aussehender Junge war ich damals, nicht wahr?», meint der Schauspieler Wassili Leonow, für den die Karriere hauptsächlich Soldatenrollen vorbehielt. Und Ekatarina Sudakowa, die auf dem Vorplatz ihren kleinen Teppich ausschüttelt, weist auf die «doch viel hübscheren Damen da drüben» und rezitiert dazu - frühmorgens und noch ohne Gebiss - eine passende Stelle aus dem Faust. Ein bürgerliches Leben wäre für sie nie in Frage gekommen, sagt sie, die als Kritikerin der staatlichen Kollektivierung sechzehn Jahre in Lagern verbracht hat. Eben diese Erfahrung habe sie zur Dichterin gemacht, ist Sudakowa überzeugt. Eine ganz andere Erinnerung an das kommunistische Regime hat Margarita Grischkewitsch, Startänzerin des Lenin grader Staatsballetts, die Nurejews Flucht in den Westen bitter als Verrat empfindet. Und Nina Tschumskaya, die auf eine erfolgreiche Karriere als Opernsängerin zurückblicken kann, glaubt, dass die Perestroika lediglich die «Diebe» reicher, die Künstler und Intellektuellen aber ihres Brots beraubt habe. </para> <para> So gewährt der Regisseur nicht nur Einblick in die Lebensläufe der illustren Heimbewohner, er zeigt auch deren Verquickung mit einem Jahrhundert sowjetischer Geschichte. Als Erzählstruktur dient ihm der Alltag im Haus «Savina»: die Mahlzeitenverteilung mit dem anachronistischen Handkarren beispielsweise oder die obligaten Verrichtungen der Pensionäre wie Gemüsegarten pflegen, Wäsche aufhängen oder in den verregneten Tag hinausschauen. Immer wieder lässt Luc Peter die ruhmvolle Vergangenheit die eintönige Gegenwart durchdringen: etwa wenn aus dem Stegreif eine Rolle deklamiert oder Literatur zitiert wird, wenn sich über die Bilder der Gegenwart die - noch immer -eindrückliche Stimme von Nina Tschumskaya legt, die ein Konzert im «Savina» vorbereitet. A l'est des rêves ist der erste lange Dokumentarfilm von Luc Peter und eine in ihrer Schlichtheit berührende Chronik. </para> </main> <objectname>Article</objectname> <created>0000-00-00 00:00:00</created> <createdby>someone</createdby> <changed>20010827185149</changed> <changedby>someone</changedby> </Article> </Document> </Page> </Section> </page> <film type="resultset"> <Film type="row" ID="Film111997539"> <ID>111997539</ID> <lang>de</lang> <sfzTitel>A l'est des rêves</sfzTitel> <sfzSubtitel/> <sfzProdjahr/> <sfzRelease>May 2000</sfzRelease> <sfzFormat>Digital Beta</sfzFormat> <sfzFarbe>1</sfzFarbe> <sfzDauer>50</sfzDauer> <sfzSprache>Russian</sfzSprache> <sfzUntertitel>French and English</sfzUntertitel> <sfzKategorie>2</sfzKategorie> <objectname>Film</objectname> <created>0000-00-00 00:00:00</created> <createdby>someone</createdby> <changed>20010704163147</changed> <changedby>someone</changedby> <Cinema_FilmFunktion type="row" ID="Cinema_FilmFunktion349"> <ID>349</ID> <fun> <FilmNr>111997539</FilmNr> <Funktion>1</Funktion> <AdressNr>3212</AdressNr> <Kontaktpers>0</Kontaktpers> <Kontaktperson> </Kontaktperson> </fun> <Funktionen type="row" ID="Funktionen1"> <ID>1</ID> <funktion> <en>Directed by</en> <de>Realisation</de> </funktion> </Funktionen> <Adressen type="row" ID="Adressen380"> <ID>380</ID> <adresse> <ipiId/> <fmId>0</fmId> <name>Peter</name> <vorname>Luc</vorname> <name2>Belle Journée Productions</name2> <plz>1203</plz> <ort>Genève</ort> <email/> <sfzId>3212</sfzId> <caeId/> <landcode>CH</landcode> </adresse> </Adressen> </Cinema_FilmFunktion> <Cinema_FilmFunktion type="row" ID="Cinema_FilmFunktion350"> <ID>350</ID> <fun> <FilmNr>111997539</FilmNr> <Funktion>2</Funktion> <AdressNr>3212</AdressNr> <Kontaktpers>0</Kontaktpers> <Kontaktperson> </Kontaktperson> </fun> <Funktionen type="row" ID="Funktionen2"> <ID>2</ID> <funktion> <en>Written by</en> <de>Drehbuch oder Drehvorlage</de> </funktion> </Funktionen> <Adressen type="row" ID="Adressen380"> <ID>380</ID> <adresse> <ipiId/> <fmId>0</fmId> <name>Peter</name> <vorname>Luc</vorname> <name2>Belle Journée Productions</name2> <plz>1203</plz> <ort>Genève</ort> <email/> <sfzId>3212</sfzId> <caeId/> <landcode>CH</landcode> </adresse> </Adressen> </Cinema_FilmFunktion> <Cinema_FilmFunktion type="row" ID="Cinema_FilmFunktion351"> <ID>351</ID> <fun> <FilmNr>111997539</FilmNr> <Funktion>3</Funktion> <AdressNr>-626623678</AdressNr> <Kontaktpers>0</Kontaktpers> <Kontaktperson> </Kontaktperson> </fun> <Funktionen type="row" ID="Funktionen3"> <ID>3</ID> <funktion> <en>Cinematographer</en> <de>Kamera</de> </funktion> </Funktionen> <Adressen type="row" ID="Adressen54"> <ID>54</ID> <adresse> <ipiId/> <fmId>0</fmId> <name>Barraz</name> <vorname>Michel</vorname> <name2/> <plz/> <ort/> <email/> <sfzId>-626623678</sfzId> <caeId/> <landcode>CH</landcode> </adresse> </Adressen> </Cinema_FilmFunktion> <Cinema_FilmFunktion type="row" ID="Cinema_FilmFunktion352"> <ID>352</ID> <fun> <FilmNr>111997539</FilmNr> <Funktion>3</Funktion> <AdressNr>3212</AdressNr> <Kontaktpers>0</Kontaktpers> <Kontaktperson> </Kontaktperson> </fun> <Funktionen type="row" ID="Funktionen3"> <ID>3</ID> <funktion> <en>Cinematographer</en> <de>Kamera</de> </funktion> </Funktionen> <Adressen type="row" ID="Adressen380"> <ID>380</ID> <adresse> <ipiId/> <fmId>0</fmId> <name>Peter</name> <vorname>Luc</vorname> <name2>Belle Journée Productions</name2> <plz>1203</plz> <ort>Genève</ort> <email/> <sfzId>3212</sfzId> <caeId/> <landcode>CH</landcode> </adresse> </Adressen> </Cinema_FilmFunktion> <Cinema_FilmFunktion type="row" ID="Cinema_FilmFunktion353"> <ID>353</ID> <fun> <FilmNr>111997539</FilmNr> <Funktion>4</Funktion> <AdressNr>2831</AdressNr> <Kontaktpers>0</Kontaktpers> <Kontaktperson> </Kontaktperson> </fun> <Funktionen type="row" ID="Funktionen4"> <ID>4</ID> <funktion> <en>Editing</en> <de>Schnitt</de> </funktion> </Funktionen> <Adressen type="row" ID="Adressen364"> <ID>364</ID> <adresse> <ipiId/> <fmId>0</fmId> <name>Sudan</name> <vorname>Karine</vorname> <name2/> <plz>1201</plz> <ort>Genève</ort> <email/> <sfzId>2831</sfzId> <caeId/> <landcode>CH</landcode> </adresse> </Adressen> </Cinema_FilmFunktion> <Cinema_FilmFunktion type="row" ID="Cinema_FilmFunktion354"> <ID>354</ID> <fun> <FilmNr>111997539</FilmNr> <Funktion>5</Funktion> <AdressNr>-626623678</AdressNr> <Kontaktpers>0</Kontaktpers> <Kontaktperson> </Kontaktperson> </fun> <Funktionen type="row" ID="Funktionen5"> <ID>5</ID> <funktion> <en>Sound</en> <de>Ton</de> </funktion> </Funktionen> <Adressen type="row" ID="Adressen54"> <ID>54</ID> <adresse> <ipiId/> <fmId>0</fmId> <name>Barraz</name> <vorname>Michel</vorname> <name2/> <plz/> <ort/> <email/> <sfzId>-626623678</sfzId> <caeId/> <landcode>CH</landcode> </adresse> </Adressen> </Cinema_FilmFunktion> <Cinema_FilmFunktion type="row" ID="Cinema_FilmFunktion355"> <ID>355</ID> <fun> <FilmNr>111997539</FilmNr> <Funktion>5</Funktion> <AdressNr>3212</AdressNr> <Kontaktpers>0</Kontaktpers> <Kontaktperson> </Kontaktperson> </fun> <Funktionen type="row" ID="Funktionen5"> <ID>5</ID> <funktion> <en>Sound</en> <de>Ton</de> </funktion> </Funktionen> <Adressen type="row" ID="Adressen380"> <ID>380</ID> <adresse> <ipiId/> <fmId>0</fmId> <name>Peter</name> <vorname>Luc</vorname> <name2>Belle Journée Productions</name2> <plz>1203</plz> <ort>Genève</ort> <email/> <sfzId>3212</sfzId> <caeId/> <landcode>CH</landcode> </adresse> </Adressen> </Cinema_FilmFunktion> <Cinema_FilmFunktion type="row" ID="Cinema_FilmFunktion356"> <ID>356</ID> <fun> <FilmNr>111997539</FilmNr> <Funktion>9</Funktion> <AdressNr>1737</AdressNr> <Kontaktpers>0</Kontaktpers> <Kontaktperson> </Kontaktperson> </fun> <Funktionen type="row" ID="Funktionen9"> <ID>9</ID> <funktion> <en>Production</en> <de>Produktion</de> </funktion> </Funktionen> <Adressen type="row" ID="Adressen264"> <ID>264</ID> <adresse> <ipiId/> <fmId>0</fmId> <name>Escale Films</name> <vorname/> <name2/> <plz>1201</plz> <ort>Genève</ort> <email/> <sfzId>1737</sfzId> <caeId/> <landcode>CH</landcode> </adresse> </Adressen> </Cinema_FilmFunktion> <Cinema_FilmFunktion type="row" ID="Cinema_FilmFunktion357"> <ID>357</ID> <fun> <FilmNr>111997539</FilmNr> <Funktion>9</Funktion> <AdressNr>57077026</AdressNr> <Kontaktpers>0</Kontaktpers> <Kontaktperson> </Kontaktperson> </fun> <Funktionen type="row" ID="Funktionen9"> <ID>9</ID> <funktion> <en>Production</en> <de>Produktion</de> </funktion> </Funktionen> <Adressen type="row" ID="Adressen637"> <ID>637</ID> <adresse> <ipiId/> <fmId>0</fmId> <name>Belle Journée Productions</name> <vorname/> <name2/> <plz>1203</plz> <ort>Genève</ort> <email/> <sfzId>57077026</sfzId> <caeId/> <landcode>CH</landcode> </adresse> </Adressen> </Cinema_FilmFunktion> <Cinema_FilmFunktion type="row" ID="Cinema_FilmFunktion358"> <ID>358</ID> <fun> <FilmNr>111997539</FilmNr> <Funktion>10</Funktion> <AdressNr>1737</AdressNr> <Kontaktpers>0</Kontaktpers> <Kontaktperson> </Kontaktperson> </fun> <Funktionen type="row" ID="Funktionen10"> <ID>10</ID> <funktion> <en>World Rights</en> <de>Weltrechte</de> </funktion> </Funktionen> <Adressen type="row" ID="Adressen264"> <ID>264</ID> <adresse> <ipiId/> <fmId>0</fmId> <name>Escale Films</name> <vorname/> <name2/> <plz>1201</plz> <ort>Genève</ort> <email/> <sfzId>1737</sfzId> <caeId/> <landcode>CH</landcode> </adresse> </Adressen> </Cinema_FilmFunktion> </Film> </film> </iba> -----Ursprüngliche Nachricht----- Von: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]Im Auftrag von Joerg Pietschmann Gesendet: Freitag, 31. August 2001 10:47 An: XSL List Betreff: AW: [xsl] Replacing all Occurences of a String "Roger" <roger@xxxxxxxx> wrote: > I tried it out, but had this message: > > XSL element 'template' cannot contain element 'with-param' at this point. > Any hints? Yes. It's a copy-and-paste error often seen in untested code of me. <grin> Spoiler space ! ! ! ! ! ! ! ! ! ! ! ! ! ! > <xsl:template name="process"> > <xsl:with-param name="text"/> > <xsl:with-param name="replacements"/> Should be <xsl:param name="text"/> <xsl:param name="replacements"/> Still untested. HTH anyway, as usual. I'm sure you have enough understanding of the XSLT language now to make it work. J.Pietschmann XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
AW: [xsl] Replacing all Occurences , Joerg Pietschmann | Thread | Re: AW: [xsl] Replacing all Occuren, David Carlisle |
Re: [xsl] how to test the existence, Janning Vygen | Date | [xsl] Find second character in a st, Paulo Henrique S. Be |
Month |