Visa ett inlägg
Oläst 2003-09-27, 02:19 #2
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Ä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.
Clarence är inte uppkopplad   Svara med citatSvara med citat