phpbar.de logo

Mailinglisten-Archive

[php] XML aus MySQL heraus versenden

[php] XML aus MySQL heraus versenden

Peter Bieling net3 at media-palette.de
Do Apr 12 18:49:04 CEST 2012


Hallo Stephan

Am 12.04.2012 15:06, schrieb Stephan Krauß:

> Wenn ich folgendes XML in der Tabelle xml und in
> der Spalte xml_text habe.
>
> --------------
> <person id="1">
>        <firstname>Max</firstname>
>        <lastname>Mustermann</lastname>
>        <age>53</age>
> </person>
> <person id="2">
>        <firstname>Paul</firstname>
>        <lastname>Jack</lastname>
>        <age>36</age>
> </person>
> <person id="3">
>        <firstname>Max</firstname>
>        <lastname>Lego</lastname>
>        <age>20</age>
> </person>
> --------------
>
> Wie kann ich einen Knoten oder Subknoten löschen ?
> Wie kann ich einen Subknoten einfügen ?

ich habe gerade noch mal unter Windows 7 mit MySQL 5.5.13 getestet.
Dabei ist mir folgendes aufgefallen:


SELECT
   UpdateXML('<a><b>ccc</b><b>dddd</b><d></d></a>', '//b', '<e>fff</e>') 
AS val3

Das funktioniert.

SELECT UpdateXML( '<a><b>ccc</b><b>dddd</b><d></d></a>', '//b', 
'<e>fff</e>' ) AS val3

Hier gibt es zwei b-Elemente und es funktioniert nicht.

@ alle:
Es wäre nett, wenn ihr das mal in eurer Umgebung testen könntet. Ich 
verstehe das Mysql-Handbuch so, und XMLPath, dass hier beide b-Elemente 
ausgetauscht werden müssten.

Nun aber zu Deiner Frage:
Bei dem zitierten Code fehlt das Wurzelelement.
Ein Element mit bestimmten Attribut findet man wie im Mysql-Handbuch 
beschrieben:
Es ist auch möglich, ein Element basierend auf dem Wert eines oder 
mehrerer seiner Attribute zu vergleichen. Dies erfolgt mit der Syntax 
tag[@attribute="value"]. So entspricht beispielsweise der Ausdruck 
//b[@id="idB"] dem zweiten Element b im Fragment <a><b id="idA"/><c/><b 
id="idB"/></a>. Um einen Vergleich mit einem beliebigen Element mit 
attribute="value" durchzuführen, benutzen Sie den XPath-Ausdruck 
//*[attribute="value"].
http://dev.mysql.com/doc/refman/5.1/de/xml-functions.html?ff=nopfpls

Allerdings sehe ich nicht den Sinn darin, diese Daten in einem Feld zu 
speichern. Den einzigen Sinn von XML in einem Feld wären für mich 
Ergänzungen zum Datensatz, für die es nicht lohnt eine neue Tabelle 
anzulegen, die man aber trotzdem strukturieren möchte.

Bei einer solchen Struktur, wie von Dir vorgestellt, würde ich die 
Daten, wenn es unbedingt XML sein muss, direkt mit SimpleXML oder den 
DOM-Funktionen
http://de2.php.net/manual/de/refs.xml.php verarbeiten.
Oder mit meinem schon etwas älteren XML-Line
http://www.media-palette.de/tools/xml-line/

Viele Grüße

Peter


php::bar PHP Wiki   -   Listenarchive