WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   XML till MySQL importer? (https://www.wn.se/forum/showthread.php?t=478)

Filip 2003-09-26 23:19

Finns det något färdigt script som hämtar hem en XML-feed och lägger det i en MySQL databas?

Tacksam för svar,

/
filip

Clarence 2003-09-27 02:19

Är det endast en struktur på XML-filen bygger du enkelt en XML parser med PHP. Jag knåpa ihop något snabbt för att leda dig lite i rätt riktning:

Exempel på XML-fil (för vilken nedanstående parser är anpassad)
Kod:

<links_archive>
        <link>
 <title>Swedish Webmaster Network</title>
 <url>http://www.webmasternetwork.se</url>
 <description>A Swedish (by origin and language) community for commercial and/or professional webmasters.</description>
        </link>
        <link>
 <title>W3 Consortium</title>
 <url>http://www.w3.org</url>
 <description>A great organisation very notable in driving the Web to it`s greatest potential</description>
        </link>
</links_archive>

Exempel på parser (för ovanstående XML-fil)
Kod:

$file = "data.xml"; //din xml feed (url eller filnamn)
$outdata=array(); //variabeln vi kommer lagra datan i
$typ = ""; //senare använd för att veta vilket nuvarande element är
$set=0; //används för att veta var i arreyn vi ska lägga datan (aktuell key)

// Används endast för att hämta namnet på elementet.
// Ska du utöka parsern till att hämta elementens attribut, hanteras det här
function startElement($foo, $namn, $foo) {
 * *global $typ;
 * *$typ = $namn;
}

//hanterar vår CDATA (placerar den i vår arrey)
function CDATA_handler($parser, $data) {
        global $typ,$outdata,$set;
        switch($typ){ // ska vi använda oss av CDATAN i detta element?
 *case 'title':
 *        $outdata[$set]['title']=$data; $typ='';       
 *break;
 *case 'url':
 *        $outdata[$set]['url']=$data; $typ='';       
 *break;
 *case 'description':
 *        $outdata[$set]['description']=$data; $typ='';
 *        $set++;
 *break;
        }
       
}

$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, 'startElement', FALSE); //funktion som hanterar start av element (och säger att vi inte behöver någon hantering för slut av element
xml_set_character_data_handler($xml_parser, 'CDATA_handler'); // funktion som hanterar CDATA
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0); // gör att vi slipper uppercase på elementnamnen
$data=join('',file($file)); //dumt och snabbt sätt att hämta filen
xml_parse($xml_parser, $data); //här sätter vi igång parsen
xml_parser_free($xml_parser); // hepp, då var allt klart, då rensar vi
var_dump($outdata); // dumpar datan i vår arrey till skärmen

Notera att den endast hanterar CDATA, är helt utan felhantering samt är rätt så fulkodad.


Alla tider är GMT +2. Klockan är nu 13:43.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson