by:

Ich möchte euch hier demonstrieren wie man eine XML Schnittstelle einfach und schnell
programmiert...
Wir haben auf der einen Seite einen Script, der eine XML Anfrage an den Server schickt
und auf der anderen Seite einen Script, der die Anfrage bearbeitet.
Angenommen wir wollen 3 Funktionalitäten über XML steuern können:
ADD, UPDATE und DELETE sprich Hinzufügen, Ändern und Löschen.

Als erstes zeige ich euch wie man ein XML erzeugt und an den Server sendet:

Code

<?php     
   
function createxml($array) {
            
            
$buf '';
            foreach(
$array as $key => $value)
            {
                if(
is_array($value))
                {
                
$buf .= "<".strtolower($key).">" createxml($value) . "</".strtolower($key).">\n";
                }
                else{
                
$buf .="<".strtolower($key)."><![CDATA[$value]]></".strtolower($key).">\n";
                }
            }
            return 
$buf;
        }

        
$aPOST["content"]["id"]        = "2";
        
$aPOST["content"]["author_id"] = "1";        
        
$aPOST["content"]["header"]    = "Wir schreiben eine XML Api";
        
$aPOST["content"]["content"]   = "Ich m?chte euch hier Demonstrieren wie man eine
XML Schnitstelle.."
;
        
$aPOST["content"]["date"]      = date("Y-m-d H:i:s");
        
        
$url 'http://www.codejungle.org/xml-api.php';
        
$POST["cmd"]="ADD";
        
$POST["apikey"]="kmlnjierg8795th2bughj3fg02jgkm0ggi";
        
$POST["data"]=createxml($aPOST);

        
$ch curl_init();
        
curl_setopt($chCURLOPT_URL$url);
        
//curl_setopt($ch, CURLOPT_USERPWD, $user . ':' . $pwd);
        
curl_setopt($chCURLOPT_POST1);
        
curl_setopt($chCURLOPT_POSTFIELDS$POST);
        
curl_setopt($chCURLOPT_RETURNTRANSFER1);
        
$feedback       curl_exec($ch);
        
$ErrNum         curl_errno($ch);
        
$ErrMsg         curl_error($ch);
        
curl_close($ch);
        echo 
$feedback;
?>


Wir erstellen hier mit Hilfe der createxml Funktion aus einem Array eine XML
Datei. Danach senden wir mit Hilfe von curl drei Parameter an die Datei xml-api.php,
cmd damit unser Script weiß, welche Funktion er aufrufen soll, in unserem Fall ADD,
den API Key um sicherzustellen, dass nicht jeder die Schnittstelle benutzen kann und
data die eigentliche XML Datei.

Nun müssen wir einen Script erstellen, der die Anfrage entgegennimmt und richtig
verarbeiten kann.

Code
<?php    
$allowed_api_keys
=array("kmlnjierg8795th2bughj3fg02jgkm0ggi");

//check if api key is valid
if(in_array($_POST[apikey], $allowed_api_keys)){
        switch(
$_POST[cmd]){

        case 
ADD;
        
$xml simplexml_load_string($_POST[data]);
        foreach(
$xml as $name => $value){
        echo 
"$name => $value";
        }
        break;
        default:
        echo 
"Please check your provided command";
        break;
        }
} else {

echo 
"Your API - Key is invalid";
}
?>

Diese Datei überprüft zuerst ob der gesendete API Key existiert,
wenn ja, überprüfen wir noch welche Funktion übergeben wurde (in unserem Fall ADD).
Hier laden wir die XML Datei mit Hilfe der simplexml_load_string Funktion ein und
geben sie anschließend aus.
Man kann nun eine Funktion schreiben, die die übergebenen XML Daten weiter verarbeitet.
Die meisten Probleme machen nach meiner Erfahrung Umlaute und Sonderzeichen,
sie führen oft zu parse errors. Dies kann man teilweise mit Hilfe des Tags
lösen, wobei der Tag selbst allerdings auch zu parse errors führen kann...
Auf Wunsch von einem guten Freund möchte ich auch noch auf XML-RPC und Soap hinweisen,
beide eignen sich ebenfalls zur Remote XML Verarbeitung.

Ich hoffe euch hat mein kleiner Exkurs gefallen und freue mich über eure Kommentare.

LG
Andreas



Name:
Hallo Michael,
du hast natürlich recht da fehlte eine Klammer, allerdings etwas weiter oben ;)
Ich hab das jetzt mal ohne zu testen korrigiert, sag mir Bescheid wenn du noch weitere Hilfe brauchst.
Grüße
Andreas

Name:
Das Ganze ist nun zwar schon ein paar tage her ;-), kann es sein, dass in dem ersten Script eine Klammer fehlt? Als totaler php-neuling würde ich sie (gefühlsmäßig) hinter return $buf; setzen.
Gibt es zu diesem Thema etwas tiefergehende Literatur für Anfänger mit Gehirnschrittmacher?

Grüße Michael

Name:
Hallo,

ich suche einen Programmierer, um in das von mir verwendete Afterbuy (Software, um auf eBay und amazon zu verkaufen) Daten automatisiert ein- (Best?nde) und auszulesen (Auftr?ge)

Das mu? ?ber eine xml-Schnittstelle laufen,
k?nnen Sie mir helfen?

Danke

Gerhard FRanz
03741/289115