Re: [TYPO3-german] wie xml konvertieren?
Hallo Bernd, die Classen t3lib_div (4.5) bzw. GeneralUtility (spätere versionen) haben xml2array bzw array2xml funktionen. Damit solltest du das xml in ein array wandeln können deine modifikationen machen können Und es wieder in ein xml Wandeln. Alternativ kannst du natürlich auch die nativen. PHP methoden neben (DOMDocument oder SimpleXML); Gruss chris -Ursprüngliche Nachricht- Von: typo3-german-boun...@lists.typo3.org [mailto:typo3-german-boun...@lists.typo3.org] Im Auftrag von bernd wilke Gesendet: Montag, 14. Juli 2014 15:02 An: typo3-german@lists.typo3.org Betreff: [TYPO3-german] wie xml konvertieren? ich habe eine Instalation mit vielen tt_content Datensätzen,die ihre Daten im Feld pi_flexform gespeichert haben. Nun soll es eine Änderung in der XML-Struktur (Feld: pi_flexform) geben. damit nicht Tausende von Datensätzen neu eingegeben werden müssen soll es eine Konvertierung geben (bei der evtl. auch mal das XML aufgeräumt werden könnte [1]). Ich habe schon versucht ein einfaches PHP-Script zu basteln, aber der Versuch mit den XML-Klassen will mir irgendwie nicht so recht gelingen. bspl: Überschrift TextText
: soll dann z.B. in folgendes gewandelt werden: Überschrift TextText
: Verschiebung von Feldern in andere Sheets, Umbenennung der Felder, ... [1] Sobald man den Typ eines CE ändert (und damit die genutzte XML-Struktur) bleiben die alten XML-Werte weiterhin gespeichert, so dass sich nach einigen Änderungen des Typs und der Felddefinitionen einige Feld- und Sheet-Leichen in den XMLs sammeln. Gibt es irgendwo schon Extensions, die ein entsprechendes Updatescript haben? Oder andere standalone update-scripte? Ich bin über jeden Hinweis dankbar. bernd -- http://www.pi-phi.de/cheatsheet.html ___ TYPO3-german mailing list TYPO3-german@lists.typo3.org http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german ___ TYPO3-german mailing list TYPO3-german@lists.typo3.org http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
Re: [TYPO3-german] wie xml konvertieren?
Hi Bernd, Nun soll es eine Änderung in der XML-Struktur (Feld: pi_flexform) geben. damit nicht Tausende von Datensätzen neu eingegeben werden müssen soll es eine Konvertierung geben (bei der evtl. auch mal das XML aufgeräumt werden könnte [1]). Ich würde Dir in jedem Fall auch eine XSL Transformation empfehlen, das ist die richtige Technologie dafür. Hier ist mal ein Beispiel XSLT, mit dem sich Dein Ausgangs-XML in Dein Ziel-XML transformieren lässt: https://gist.github.com/tesselation/7fd37e64c983bc67cdfc Du kannst es hier testen: http://www.freeformatter.com/xsl-transformer.html Zum Ansatz: Vom Wurzelknoten aus wird über die Kindknoten des Ausgangs-XMLs iteriert. Dabei würde ich mit "call-template" und nicht mit "match" arbeiten, da man so eine bessere Kontrolle über die Struktur des Ziel-XMLs hat. Für jedes neue Sheet, das Du generieren möchtest, rufst Du ein entsprechendes auf. In diesen Sheet-Templates selektierst Du Dir dann mit XPATH Ausdrücken die Knoten aus Deinem Ausgangs-XML, die dann mittes copy-of einschließlich ihrer Kindknoten an die richtige Stelle im Ziel-XML kopiert werden. Wie immer bei XSL Transformationen hängt alles stark von der Struktur des Ausgangs-XMLs ab. Wenn sich die Strukturen Deiner Flexform-Felder stark unterscheiden, musst du u.U. noch ein paar Ausnahmeregeln/-templates einbauen, um solche Fälle dann während der Transformation abzufangen (bspw. mit xsl:if etc.). Insgesamt wäre mein Ansatz ein eID Skript, dass zunächst die DB konnektiert und dann alle pi_flexforms holt. Dann würde ich über die Ergebniszeilen iterieren, die Flexform-Strings mittels SimpleXML laden und dieses Objekt dann in ein DOMDocument importieren. Mit dem DOMDocument lässt sich dann eine XSL Transformation durchführen und das Resultat als XML String zurückgeben. Und dann ab damit zurück in die DB. Das hier könnte hilfreich für das Verfahren sein: https://forge.typo3.org/projects/extension-cobj_xslt/repository/entry/trunk/class.tx_cobj_xslt.php Noch ein Hinweis: In PHP gibt es leider nur XSLT 1.0, darauf muss man achten, wenn man nach Lösungsvorschlägen im Web sucht. Dafür kriegst Du über die Registrierung des PHP Namespaces im Kopf Deines XSLT Stylesheets Zugriff auf PHP Funktionen, die dann auch im Stylesheet verwendet werden können. Das ist ziemlich praktisch, wenn man auch Regex o.ä. bei einer Transformation braucht. Mehr dazu hier: http://php.net/manual/de/xsltprocessor.registerphpfunctions.php Viel Erfolg! Torsten ___ TYPO3-german mailing list TYPO3-german@lists.typo3.org http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
Re: [TYPO3-german] wie xml konvertieren?
Am 15.07.14 10:03, schrieb bernd wilke: Am 14.07.14 20:06, schrieb Bernd Pier: Hallo Bernd, Extensions und Updatescript kenn ich keine. da fällt mir nur http://php.net/manual/de/book.simplexml.php ein. Ich habe schon versucht ein einfaches PHP-Script zu basteln, aber der Versuch mit den XML-Klassen will mir irgendwie nicht so recht gelingen. was gelingt denn nicht so recht? die in pi_flexform definierten Daten bestehen nicht so sehr aus direkten XML-Tags, sondern haben einerseits die Nutzdaten erst noch mal in Sub-Tags eingepackt (Eine Abfrage ob ein Wert überhaupt gesetzt ist wird dadurch kompliziert) zum anderen werden überall die gleichen Tags benutzt, die sich nur in den Attributen unterscheiden, was die Auswahl wiederum kompliziert. Womit ich auch Schwierigkeiten habe ist die Datenstruktur für die XML-Daten. Logisch erscheint mir eine DOM-Struktur wie bei HTML, mit der Option des ineinanderschachtelns und vor allem auslesen und einfügen mit eindeutigem Pfad. Je nach verwendeter XML-Bibliothek/-Klasse funktioniert mal das eine besser und das andere kaum bis gar nicht, mal umgekehrt. wünschen würde ich mir Funktionen für folgenden Algorithmus: für alle CEs: hole pi_flexform zerlege XML init Ausgabevar iteriere über alle Felder: hole Wert nach neuer Struktur wenn leer: hole Wert nach alter Struktur wenn nicht leer: speichere Wert in Ausgabevar nach neuer Struktur speichere Ausgabevar als XML in pi_flexform bernd Du kannst das vielleicht mit SimpleXML machen, Attribute auslesen und iterieren geht, aber ich glaub da ist der Ansatz mit XSLT besser. Damit kenn ich mich aber nicht so gut aus. grüssle Bernd ___ TYPO3-german mailing list TYPO3-german@lists.typo3.org http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
Re: [TYPO3-german] wie xml konvertieren?
Am 14.07.14 21:37, schrieb Peter Kühnlein: Am 14.07.2014 21:07, schrieb Michael Schumann: Gibt es irgendwo schon Extensions, die ein entsprechendes Updatescript > >haben? > >Oder andere standalone update-scripte? >Extensions und Updatescript kenn ich keine. >da fällt mir nurhttp://php.net/manual/de/book.simplexml.php ein. Ja ich empfehle auch klassisch an die Sache mittels http://php.net/manual/de/refs.xml.php dran zu gehen. Man ist dann doch flexibler und kann seine Skripte schreiben wie sie sein sollen. Habe selber schon aus der Umfrageextension " kequestionnaire" massiv Daten ausgelesen und von a nach b über c manipuliert. Grüße Michael Wieso eigentlich nicht (noch klassischer) mit XSL-Transformationen? Da braucht's nicht mal ein PHP-Skript. Man kann sozusagen in XML bleiben. das klingt eigentlich ganz interessant, nur habe ich von XLS(T) keine Ahnung. Hast du dazu mal Beispiele? zb. für das XML, das ich im Urprungsposting drin hatte. bernd -- http://www.pi-phi.de/cheatsheet.html ___ TYPO3-german mailing list TYPO3-german@lists.typo3.org http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
Re: [TYPO3-german] wie xml konvertieren?
Am 14.07.14 20:06, schrieb Bernd Pier: Hallo Bernd, Extensions und Updatescript kenn ich keine. da fällt mir nur http://php.net/manual/de/book.simplexml.php ein. Ich habe schon versucht ein einfaches PHP-Script zu basteln, aber der Versuch mit den XML-Klassen will mir irgendwie nicht so recht gelingen. was gelingt denn nicht so recht? die in pi_flexform definierten Daten bestehen nicht so sehr aus direkten XML-Tags, sondern haben einerseits die Nutzdaten erst noch mal in Sub-Tags eingepackt (Eine Abfrage ob ein Wert überhaupt gesetzt ist wird dadurch kompliziert) zum anderen werden überall die gleichen Tags benutzt, die sich nur in den Attributen unterscheiden, was die Auswahl wiederum kompliziert. Womit ich auch Schwierigkeiten habe ist die Datenstruktur für die XML-Daten. Logisch erscheint mir eine DOM-Struktur wie bei HTML, mit der Option des ineinanderschachtelns und vor allem auslesen und einfügen mit eindeutigem Pfad. Je nach verwendeter XML-Bibliothek/-Klasse funktioniert mal das eine besser und das andere kaum bis gar nicht, mal umgekehrt. wünschen würde ich mir Funktionen für folgenden Algorithmus: für alle CEs: hole pi_flexform zerlege XML init Ausgabevar iteriere über alle Felder: hole Wert nach neuer Struktur wenn leer: hole Wert nach alter Struktur wenn nicht leer: speichere Wert in Ausgabevar nach neuer Struktur speichere Ausgabevar als XML in pi_flexform bernd -- http://www.pi-phi.de/cheatsheet.html ___ TYPO3-german mailing list TYPO3-german@lists.typo3.org http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
Re: [TYPO3-german] wie xml konvertieren?
Am 15.07.14 09:15, schrieb David Gurk: Also einer der extremsten Form der FlexForm-Manipulation macht wohl die Extension flux von Claus Due: https://github.com/FluidTYPO3/flux Vielleicht ein Ansatz für dich? das ist ja gerade der Grund der Änderungen ;) ich benutze ext:flux und ext:fluidcontent für eigene CEs. Deren Struktur hat sich aber inzwischen verändert. Das ist bisher aber nicht aufgefallen, weil irgendwie auf die alten Felder zugegriffen wurde und alles wie gehabt funktionierte. Jetzt wollte ich ein Update für ext:flux & Co einspielen, musste es aber rückgängig machen weil die Redakteure nicht mehr an die alten Feldinhalte kamen und so nichts mehr ändern konnten (das FE hat interessanterweise weiter funktioniert) für dieses Update muss ich also die XML-Struktur ändern, damit die Redakteure weiterhin die CEs pflegen können. Das hätte natürlich schon längst passieren müssen. Aber es hat ja funktioniert :/ Ansonsten sehe ich ext:flux nicht so sehr als Manipulation von Daten, sondern eher als Konfiguration für Editor und Ausgabe. bernd -- http://www.pi-phi.de/cheatsheet.html ___ TYPO3-german mailing list TYPO3-german@lists.typo3.org http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
Re: [TYPO3-german] wie xml konvertieren?
Also einer der extremsten Form der FlexForm-Manipulation macht wohl die Extension flux von Claus Due: https://github.com/FluidTYPO3/flux Vielleicht ein Ansatz für dich? Ansonsten kann es auch sehr hilfreich sein, mal im TYPO3 CMS Core reinzuschauen. Dort kannst du dir anschauen wie es intern gelöst ist und dich daran orientieren. Zum Teil müssten auch API-Funktionen direkt im Core verfügbar sein. Gruß David -Ursprüngliche Nachricht- Von: typo3-german-boun...@lists.typo3.org [mailto:typo3-german-boun...@lists.typo3.org] Im Auftrag von bernd wilke Gesendet: Montag, 14. Juli 2014 15:02 An: typo3-german@lists.typo3.org Betreff: [TYPO3-german] wie xml konvertieren? ich habe eine Instalation mit vielen tt_content Datensätzen,die ihre Daten im Feld pi_flexform gespeichert haben. Nun soll es eine Änderung in der XML-Struktur (Feld: pi_flexform) geben. damit nicht Tausende von Datensätzen neu eingegeben werden müssen soll es eine Konvertierung geben (bei der evtl. auch mal das XML aufgeräumt werden könnte [1]). Ich habe schon versucht ein einfaches PHP-Script zu basteln, aber der Versuch mit den XML-Klassen will mir irgendwie nicht so recht gelingen. bspl: Überschrift TextText
: soll dann z.B. in folgendes gewandelt werden: Überschrift TextText
: Verschiebung von Feldern in andere Sheets, Umbenennung der Felder, ... [1] Sobald man den Typ eines CE ändert (und damit die genutzte XML-Struktur) bleiben die alten XML-Werte weiterhin gespeichert, so dass sich nach einigen Änderungen des Typs und der Felddefinitionen einige Feld- und Sheet-Leichen in den XMLs sammeln. Gibt es irgendwo schon Extensions, die ein entsprechendes Updatescript haben? Oder andere standalone update-scripte? Ich bin über jeden Hinweis dankbar. bernd -- http://www.pi-phi.de/cheatsheet.html ___ TYPO3-german mailing list TYPO3-german@lists.typo3.org http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german ___ TYPO3-german mailing list TYPO3-german@lists.typo3.org http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
Re: [TYPO3-german] wie xml konvertieren?
Am 14.07.2014 21:07, schrieb Michael Schumann: Gibt es irgendwo schon Extensions, die ein entsprechendes Updatescript > >haben? > >Oder andere standalone update-scripte? >Extensions und Updatescript kenn ich keine. >da fällt mir nurhttp://php.net/manual/de/book.simplexml.php ein. Ja ich empfehle auch klassisch an die Sache mittels http://php.net/manual/de/refs.xml.php dran zu gehen. Man ist dann doch flexibler und kann seine Skripte schreiben wie sie sein sollen. Habe selber schon aus der Umfrageextension " kequestionnaire" massiv Daten ausgelesen und von a nach b über c manipuliert. Grüße Michael Wieso eigentlich nicht (noch klassischer) mit XSL-Transformationen? Da braucht's nicht mal ein PHP-Skript. Man kann sozusagen in XML bleiben. LG Peter -- http://function2form.net http://peter-kuehnlein.net "Kosuke would make the rounds around the sleeping quarters of his master, and if he thought a certain area to be insecure, he would spread a straw mat and pass through the night awake by himself." (Hagakure) ___ TYPO3-german mailing list TYPO3-german@lists.typo3.org http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
Re: [TYPO3-german] wie xml konvertieren?
> > Gibt es irgendwo schon Extensions, die ein entsprechendes Updatescript > > haben? > > Oder andere standalone update-scripte? > Extensions und Updatescript kenn ich keine. > da fällt mir nur http://php.net/manual/de/book.simplexml.php ein. Ja ich empfehle auch klassisch an die Sache mittels http://php.net/manual/de/refs.xml.php dran zu gehen. Man ist dann doch flexibler und kann seine Skripte schreiben wie sie sein sollen. Habe selber schon aus der Umfrageextension " kequestionnaire" massiv Daten ausgelesen und von a nach b über c manipuliert. Grüße Michael -Ursprüngliche Nachricht- Von: typo3-german-boun...@lists.typo3.org [mailto:typo3-german-boun...@lists.typo3.org] Im Auftrag von Bernd Pier Gesendet: Montag, 14. Juli 2014 20:07 An: typo3-german@lists.typo3.org Betreff: Re: [TYPO3-german] wie xml konvertieren? Am 14.07.14 15:01, schrieb bernd wilke: > ich habe eine Instalation mit vielen tt_content Datensätzen,die ihre > Daten im Feld pi_flexform gespeichert haben. > > Nun soll es eine Änderung in der XML-Struktur (Feld: pi_flexform) geben. > damit nicht Tausende von Datensätzen neu eingegeben werden müssen soll > es eine Konvertierung geben (bei der evtl. auch mal das XML aufgeräumt > werden könnte [1]). > > Ich habe schon versucht ein einfaches PHP-Script zu basteln, aber der > Versuch mit den XML-Klassen will mir irgendwie nicht so recht gelingen. > > > bspl: > > > > > > >Überschrift > > >Text > index="_TRANSFORM_vDEF.vDEFbase"><p>Text</p> > > : > > soll dann z.B. in folgendes gewandelt werden: > > > > > > >Überschrift > > > > > > >Text > index="_TRANSFORM_vDEF.vDEFbase"><p>Text</p> > > : > > Verschiebung von Feldern in andere Sheets, Umbenennung der Felder, ... > > [1] Sobald man den Typ eines CE ändert (und damit die genutzte > XML-Struktur) bleiben die alten XML-Werte weiterhin gespeichert, so > dass sich nach einigen Änderungen des Typs und der Felddefinitionen > einige > Feld- und Sheet-Leichen in den XMLs sammeln. > > Gibt es irgendwo schon Extensions, die ein entsprechendes Updatescript > haben? > Oder andere standalone update-scripte? > > Ich bin über jeden Hinweis dankbar. > > bernd Hallo Bernd, Extensions und Updatescript kenn ich keine. da fällt mir nur http://php.net/manual/de/book.simplexml.php ein. >> Ich habe schon versucht ein einfaches PHP-Script zu basteln, aber der >> Versuch mit den XML-Klassen will mir irgendwie nicht so recht gelingen. was gelingt denn nicht so recht? grüssle Bernd ___ TYPO3-german mailing list TYPO3-german@lists.typo3.org http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german ___ TYPO3-german mailing list TYPO3-german@lists.typo3.org http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
Re: [TYPO3-german] wie xml konvertieren?
Am 14.07.14 15:01, schrieb bernd wilke: ich habe eine Instalation mit vielen tt_content Datensätzen,die ihre Daten im Feld pi_flexform gespeichert haben. Nun soll es eine Änderung in der XML-Struktur (Feld: pi_flexform) geben. damit nicht Tausende von Datensätzen neu eingegeben werden müssen soll es eine Konvertierung geben (bei der evtl. auch mal das XML aufgeräumt werden könnte [1]). Ich habe schon versucht ein einfaches PHP-Script zu basteln, aber der Versuch mit den XML-Klassen will mir irgendwie nicht so recht gelingen. bspl: Überschrift TextText
: soll dann z.B. in folgendes gewandelt werden: Überschrift TextText
: Verschiebung von Feldern in andere Sheets, Umbenennung der Felder, ... [1] Sobald man den Typ eines CE ändert (und damit die genutzte XML-Struktur) bleiben die alten XML-Werte weiterhin gespeichert, so dass sich nach einigen Änderungen des Typs und der Felddefinitionen einige Feld- und Sheet-Leichen in den XMLs sammeln. Gibt es irgendwo schon Extensions, die ein entsprechendes Updatescript haben? Oder andere standalone update-scripte? Ich bin über jeden Hinweis dankbar. bernd Hallo Bernd, Extensions und Updatescript kenn ich keine. da fällt mir nur http://php.net/manual/de/book.simplexml.php ein. Ich habe schon versucht ein einfaches PHP-Script zu basteln, aber der Versuch mit den XML-Klassen will mir irgendwie nicht so recht gelingen. was gelingt denn nicht so recht? grüssle Bernd ___ TYPO3-german mailing list TYPO3-german@lists.typo3.org http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german