XML Parser Frage

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • XML Parser Frage

    Hallo zusammen,

    Ich möchte ein XML -> SQL Import Script mit PHP bauen, da ich Daten die ich als XML Datei bekomme in meine Datenbank einlesen möchte. Jetzt habe ich folgenden Code (stark vereinfacht)

    Import.php

    PHP-Code:

    <? 
    $xml_filename="musik.xml"; 

    $xml_parser_handle = xml_parser_create(); 

    if (!($parse_handle = fopen($xml_filename, 'r'))) { 
    die("FEHLER: Datei $xml_filename nicht gefunden."); 


    while ($xml_data = fread($parse_handle, 4096)) 

    if (!xml_parse($xml_parser_handle, $xml_data, feof($parse_handle))) 

    die(sprintf('XML error: %s at line %d', 
    xml_error_string(xml_get_error_code($xml_parser_handle)), 
    xml_get_current_line_number($xml_parser_handle))); 

    echo "XML_DATA: $xml_data<br>";
    echo "XML_Parser_Handle: $xml_parser_handle <br>";
    echo "Parse_Handle: $parse_handle <br>";


    xml_parser_free($xml_parser_handle); 

    ?>


    Musik

    PHP-Code:

    <?xml version="1.0"?> 

    <musik> 
    <cd> 
    <titel>State of Confusion</titel> 
    <band>Kinks</band> 
    <laenge>41:29</laenge> 
    <preis>12,80 DM</preis> 
    </cd> 
    <cd> 
    <titel>Strangers in the Night</titel> 
    <band>UFO</band> 
    <laenge>109:26</laenge> 
    <preis>29,90 DM</preis> 
    </cd> 
    </musik>

    Funktionieren tut das soweit ja, also das Ergebnis sieht so aus:


    XML_DATA: State of Confusion Kinks 41:29 12,80 DM Strangers in the Night UFO 109:26 29,90 DM
    XML_Parser_Handle: Resource id #2
    Parse_Handle: Resource id #4

    meine Frage jetzt: Wie erreiche ich die einzelnen Tags von XML? Sodass ich mein Mapping auf die SQL DB machen kann.
    D.h. wie kann ich meinem Script sagen, dass immer wenn eine neue <cd> kommt, er mir den wert <title> ausgibt? sodass ich dann ganz einfach den wert <title> nehmen kann und insert into ausführen kann!

    wär super wenn mir jemand möglichst schnell dabei helfen könnte, vielen Dank im vorraus!
    Live is a bitch... so fuck it

  • #2
    Ich glaube ich habe die Lösung selbst entdeckt



    PHP-Code:

    <?php
    $file 
    'musik.xml';
    $stack = array();

    function 
    startTag($parser$name$attrs
    {
       global 
    $stack;
       
    $tag=array("name"=>$name,"attrs"=>$attrs);  
       
    array_push($stack,$tag);
      
    }

    function 
    cdata($parser$cdata)
    {
       global 
    $stack,$i;
       
       if(
    trim($cdata))
       {    
           
    $stack[count($stack)-1]['cdata']=$cdata;    
       }
    }

    function 
    endTag($parser$name
    {
       global 
    $stack;  
       
    $stack[count($stack)-2]['children'][] = $stack[count($stack)-1];
       
    array_pop($stack);
    }

    $xml_parser xml_parser_create();
    xml_set_element_handler($xml_parser"startTag""endTag");
    xml_set_character_data_handler($xml_parser"cdata");

    $data xml_parse($xml_parser,file_get_contents($file));
    if(!
    $data) {
       die(
    sprintf("XML error: %s at line %d",
    xml_error_string(xml_get_error_code($xml_parser)),
    xml_get_current_line_number($xml_parser)));
    }

    xml_parser_free($xml_parser);

    print(
    "<pre>\n");
    print_r($stack);
    print(
    "</pre>\n");
    ?>

    danke trotzdem, falls jemand was besseres weiß bin ich natürlich offen für vorschläge!

    Mfg
    Live is a bitch... so fuck it

    Kommentar

    Lädt...
    X