Mailinglisten-Archive |
Hallo Peter,
erstmal danke für deine Antwort.
Peter Bieling wrote:
> Ich würde nach Möglichkeit auf den ganzen DOM-Kram verzichten, denn so
> wie es aussieht holst Du ja nur ein Tabellenzeilen-Template aus der
> XML-Datei, das Du dann füllen willst.
Das stimmt teilweise. Ich möchte die Platzhalter füllen, aber eben auch
die Tabellenzeile n mal vervielfältigen. Die Tabellenzeile steht nur
einmal in der OpenOffice Vorlage und schaut entsprechend in der
content.xml Datei so aus:
<table:table-row>
<table:table-cell table:style-name="Table2.A2"
office:value-type="string">
<text:p text:style-name="P2">{NO. RECEIPTS}</text:p>
</table:table-cell>
<table:table-cell table:style-name="Table2.A2"
office:value-type="string">
<text:p text:style-name="P2">{DESCRIPTION RECEIPTS}</text:p>
</table:table-cell>
<table:table-cell table:style-name="Table2.A2"
office:value-type="string">
<text:p text:style-name="P2">{CATEGORY RECEIPTS}</text:p>
</table:table-cell>
<table:table-cell table:style-name="Table2.D2"
office:value-type="string">
<text:p text:style-name="P2">{RECEIPTS}<text:s/>{AMOUNT}</text:p>
</table:table-cell>
</table:table-row>
Das heisst um die Tabellen-Zeile n-mal vervielfältigen zu können, muss
ich die komplette <table:table-row>...</table:table-row>
vervielfältigen. Das erreiche ich mit cloneNode und appendChild.
Die Anzahl der erforderlichen Tabellenzeilen kommen aus einer
DB-Abfrage. Es sind die Belege, die zu einer Spesenabrechnung gehören.
Diese Tabellen-Zeile oben steht nur einmal in der .odt Vorlage und soll
entsprechend der Anzahl der Belege vervielfältigt werden.
Das Ersetzen der Platzhalter funktioniert ja auch wunderbar, nur wenn
ich diese Tabellenzeile jetzt 5 mal habe, dann steht auch z.B. 5 mal der
Platzhalter {NO. RECEIPTS} in den zeilen.
Ersetze ich dann mit str_replace {NO. RECEIPTS} das erste Mal, sind ja
alle Vorkommen von {NO. RECEIPTS} ersetzt und nicht nur das Erste.
Ich bräuchte sowas {NO. RECEIPTS}{$i} als Platzhalter und $i würde dann
nach jedem Durchlauf hochgezählt, sodass ich dann {NO. RECEIPTS}{1},
{NO. RECEIPTS}{2} usw. habe.
So habe ich es auch schon versucht, aber $i wird halt nicht als Variable
interpretiert.
> In XML-Dateien gehören ja
> normalerweise Daten, während Templates in Template-Dateien gehören. ;-)
> (Ausnahme sind natürlich Templates im XML-Format, z.B. XSLT-Dateien aber
> die bearbeitet man dann auch nicht mit str_replace.)
Ich hoffe nach meiner Beschreibung oben ist mein Problem jetzt klarer?
> Vielleicht erklärst Du mal genauer, was Du vor hast, und warum die
> DOM-Funktionen Dir besonders geeignet erscheinen, Dein Problem zu lösen.
> Kommt diese XML-Datei z.B. aus fremder Quelle, auf die Du keinen
> Einfluss hast?
> So lange man den Sinn nicht versteht, fehlt auch ein bisschen die
> Motivation, Dir zu helfen.
Die OpenOffice Datei ist eine Vorlage, die ich nicht beeinflussen kann
und enthält unter anderem Platzhalter in einer Tabellenzeile, die
beliebig oft dupliziert werden können muss (die Tabellenzeile) und dann
jeweils mit anderen Daten gefüllt wird.
Es muss auch möglich sein, dass die OpenOffice Datei im Design und
Layout angepasst werden kann, daher muss ich den DOM weg gehen, um alle
Formatierungen der Nodes und ChildNodes usw. behalten zu können und
flexibel zu bleiben.
Da es ja eine pure XML-Datei ist, die ich bearbeiten muss, denke ich
dass DOM da schon der richtige Weg ist, es hakt halt nur gerade ein wenig...
Irgendwie tue ich mir schwer das Problem zu beschreiben, ich hoffe es
ist jetzt klar geworden!?
Gruss
Andi
php::bar PHP Wiki - Listenarchive