This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
AW: Replacing all Occurences of a String
- To: <xsl-list at lists dot mulberrytech dot com>
- Subject: AW: [xsl] Replacing all Occurences of a String
- From: "Roger" <roger at nomad dot ch>
- Date: Fri, 31 Aug 2001 15:39:46 +0200
- Reply-To: xsl-list at lists dot mulberrytech dot com
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@lists.mulberrytech.com
[mailto:owner-xsl-list@lists.mulberrytech.com]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@nomad.ch> 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