XML - String mit PHP auslesen / durch XML-String hangeln


Seite: 1
Autor Beitrag
Nio
22.07.13 - 16:45:43 Uhr

Hallo;

Ich fühle mich grade ein wenig doof, aber naja... Ich bin grad zu doof, um mich durch ne XML-Datei zu hangeln...
Diese XML übergebe ich an ne PHP-Datei, die den Inhalt dann in ne datenbank packen soll.
Die XML sieht vereinfacht so aus:
  1. <root>  
  2. <basic>  
  3. <size>XXS</size>  
  4. </basic>  
  5. <motiv>  
  6. <bild x='134' y='112'>hfu-logo.jpg</bild>  
  7. </motiv>  
  8. <bestellung>  
  9. </bestellung>  
  10. </root>  


Und das wäre meine PHP-Datei:

Wie gesagt, ich weiß, das ich ganz nah an der Lösung bin, aber ich komme nicht drauf... :-/


  1. <?php  
  2. include "FormToPHP.php";  
  3.  
  4. $xml $_REQUEST["xml"];  
  5. print $xml ."\n";  
  6.  
  7.  
  8. global $motiv;  
  9.  
  10.  
  11.  
  12. //*/ XML-String in DOM laden  
  13. $dom = new domDocument("1.0""utf-8");  
  14. $dom->loadXML($xml);  
  15. //*/  
  16.  
  17. /*/ Durch die XML-Daten iterieren und eine Ausgabe erzeugen  
  18. foreach ($dom->getElementsByTagName('draw') as $node) {  
  19.     print("Object: " . $node->getAttribute('object')." | ");  
  20.     print("x: " . $node->getAttribute('x')." | ");  
  21.     print("y: " . $node->getAttribute('y')."\n");  
  22. }  
  23. //*/  
  24.  
  25. //*/ Mit dem Datenbankserver verbinden und eine Datenbank wählen  
  26. require "db_data.php";  
  27. include "feedback.php";  
  28.  
  29. $link mysql_connect($db_server$db_user$db_pass);  
  30. feedback($link"Connect");  
  31.  
  32. $q "USE ".$db_name;  
  33. $r mysql_query($q);  
  34. feedback($r$q);  
  35. //*/  
  36.  
  37. //*/ Innerhalb der Datenbank die Tabelle "draw" löschen und neu anlegen. Löschen liefert Fehler, wenn die Tabelle noch nicht existiert  
  38. $q "DROP TABLE draw";  
  39. $r mysql_query($q);  
  40. feedback($r$q);  
  41.  
  42.  
  43. $q "CREATE TABLE draw (id INTEGER AUTO_INCREMENT PRIMARY KEY, object VARCHAR(1), x FLOAT, y FLOAT)";  
  44. //$q = "CREATE TABLE draw (id INTEGER AUTO_INCREMENT PRIMARY KEY, gender VARCHAR(1), size VARCHAR(3), sort VARCHAR(15), color INTEGER, motivFull VARCHAR(50), quantity INTEGER, name VARCHAR(30), streetnumber VARCHAR(7), street VARCHAR(25), town VARCHAR(25))";  
  45. $q "CREATE TABLE draw (id INTEGER AUTO_INCREMENT PRIMARY KEY, motivFull VARCHAR(50))";  
  46. $r mysql_query($q);  
  47. feedback($r$q);  
  48. //*/  
  49.  
  50.  
  51.  
  52. $xml4content simplexml_load_string$xml);  
  53. foreach ( $xml4content->interpret as $content )    
  54. {  
  55.     //global $motiv;  
  56.     $motiv $content['root'];    
  57.       
  58.     //echo 'Name: ' . $content->name . '<br>';    
  59.       
  60. }  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67. //*/ Durch XML-Daten iterieren und die Knotenattribute zeilenweise in der Tabelle "draw" ablegen  
  68. foreach ($dom->getElementsByTagName('bild') as $node) {  
  69.     $x $node -> getAttribute('x');  
  70.     $y $node -> getAttribute('y');  
  71.       
  72.     //$color = $node['color'];  
  73.     //$motiv -> getParameter(motiv);  
  74.     //$motiv = $_POST["bild"];  
  75.     //$motiv = var_dump   
  76.       
  77.     //$motiv -> getElementsByTagName(bild);  
  78.       
  79.     $motivFull 'x: ' $x ' y: ' $y ' motiv: ' $motiv;  
  80.       
  81.       
  82.       
  83.     // Zeile mit einer Query schreiben  
  84.     // $q = "INSERT INTO draw (gender, size, sort, color, motivFull, quantity , name, streetnumber, street, town) VALUES ($gender, $size, $sort, $color, $motivFull, $quantity, $name, $streetnumber, $street, $town)";  
  85.     $q "INSERT INTO draw (motivFull) VALUES ('$motivFull')";  
  86.     //$q = "INSERT INTO draw (color) VALUES ('$color')";  
  87.       
  88.     $r mysql_query($q);  
  89.     feedback($r$q);  
  90.       
  91. }  
  92. //*/  
  93.  
  94. mysql_close($link);  
  95. ?>  



Wäre cool, wenn mir jemand helfen könnte
LG
Achtzig
22.07.13 - 17:39:50 Uhr

Zitat: Wie gesagt, ich weiß, das ich ganz nah an der Lösung bin, aber ich komme nicht drauf

Und ich komme gerade nicht drauf, was die Lösung sein soll - es ist heiß und das Denken fällt schwer

Was funktioniert denn eigentlich nicht? Das Durchhangeln durch XML oder der MySQL-Zugriff?

Wenn ersteres dann wäre noch interessant, wie der Inhalt von $motivFull am Ende aussieht (einfach mal mit echo ausgeben).
Kabarakh
25.07.13 - 09:06:08 Uhr

ich weoß jetzt auch nicht was das problem ist...

was wir auf arbeit immer machen ist den gesamten string mit simplexml_load_string auf einmal in ein objekt zu laden, und notfalls villeicht in ein array umzuwandeln (da gibts im netz funktionen dafür) - dann kann man da wunderbar drüberiterieren und hat (solange das xml sauber ist) saubere objekte/arrays
Seite: 1

- Obige Beiträge stellen keine Äußerung oder Meinung von Pytal oder dessen Betreiber dar -