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