Re: [TYPO3-german] wie xml konvertieren?

2014-07-17 Diskussionsfäden Chris Wolff - AERTiCKET AG
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


  Text
  

Text

: soll dann z.B. in folgendes gewandelt werden: Überschrift Text

Text

: 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?

2014-07-15 Diskussionsfäden Torsten Schrade

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?

2014-07-15 Diskussionsfäden Bernd Pier

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?

2014-07-15 Diskussionsfäden bernd wilke

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?

2014-07-15 Diskussionsfäden 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
--
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?

2014-07-15 Diskussionsfäden bernd wilke

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?

2014-07-15 Diskussionsfäden 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?

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


  Text
  

Text

: soll dann z.B. in folgendes gewandelt werden: Überschrift Text

Text

: 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?

2014-07-14 Diskussionsfäden 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.


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?

2014-07-14 Diskussionsfäden 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 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?

2014-07-14 Diskussionsfäden Bernd Pier

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
   

Text

: soll dann z.B. in folgendes gewandelt werden: Überschrift Text

Text

: 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