2009-08-11 3 views
0

Ich habe eine einzelne XML-Parsing-Funktion, die ich mehrmals aufrufen möchte, da ich nur ein wenig Daten ausstreifen und weitermachen muss. Hier"Schwerwiegender Fehler: kann nicht neu deklarieren" bei der Wiederverwendung von XML-Parsing-Code

ist die Funktion:

//Parse Product ID from Product Sides 
function getProductSpecs($xml,$type) { 

    // Setup arrary 
    global $productspecs; 
    global $count; 
    $count = 0; 
    global $type_check; 
    $type_check = $type; 

    // Parse the XML 
    // Create the parser 
    if (! ($xmlparser = xml_parser_create())) 
    { 
    die ("Cannot create name list parser"); 
    } 

    // Start tag function 
    function first($parser, $name, $attribs) { 
     global $trigger; 
     if ($name == "PRODUCTSIDEID") { 
      $trigger = 1; 
     } elseif ($name == "PRODUCTID") { 
      $trigger = 1; 
     } 
    } 

    // data handler function 
    function xml($parser, $data) { 
     global $trigger; 
     global $productspecs; 
     global $count; 
     global $type_check; 
     if ($trigger == 1){ 
      if ($type_check == "sideid") { 
       $productspecs[$count]=$data; 
       $count = $count + 1; 
      } elseif ($type_check == "productid") { 
       $productspecs[$count]=$data; 
       $count = $count + 1; 
      }    
      $trigger = 0; 
     } 
    } 

    // Call the handler functions 
    xml_set_element_handler($xmlparser, "first", ""); 

    // Call the data handler 
    xml_set_character_data_handler($xmlparser, "xml"); 

    // Parse the XML data 
    xml_parse($xmlparser,$xml); 
    // Clear parser 
    xml_parser_free($xmlparser); 

    //Return the array 
    return $productspecs; 
} 

Mein Problem entsteht, wenn diese aufgerufen wird:

xml_set_element_handler($xmlparser, "first", ""); 

ich den neu deklarieren Fehler erhalten auf:

function first($parser, $name, $attribs) { 

Die Funktion wird nur angezeigt, die Einmal und ich nehme an, das Problem tritt bei dem Anruf auf, aber gibt es einen Weg um dies, so muss ich nicht du so viel Code machen. Ich werde das mehrmals durchlaufen müssen.

Danke.

Antwort

1

Das Definieren von Funktionen innerhalb von Funktionen kann dazu führen. Jedes Mal, wenn Sie getProductSpecs() ausführen, wird versucht, first() und xml() erneut zu deklarieren, und in PHP sind alle Benutzerfunktionen declared in a global scope. Die beste Lösung ist, Ihre first() Funktion und Ihre xml() Funktion außerhalb der Hauptfunktion getProductSpecs() zu verschieben.

Eine weitere Option ist um Ihre Funktionsdeklarationen zu verwenden, wie folgt aus:

if (! function_exists('first')) { 
// Start tag function 
    function first($parser, $name, $attribs) { 
     global $trigger; 
     if ($name == "PRODUCTSIDEID") { 
       $trigger = 1; 
     } elseif ($name == "PRODUCTID") { 
       $trigger = 1; 
     } 
    } 
} 
+0

Sie für die Antwort danken. Ich nahm an, dass es etwas in diesem Sinne war, ich hatte meinen Kopf nicht darum herumgelegt. – techguytom

Verwandte Themen