webForumDet fria alternativet

Hämta info från xml-fil

PHP

6 svar · 412 visningar · startad av Type

Medlem sedan mars 20021 239 inlägg
Frågan#1

Hej
Nu har jag sökt runt som tusan.. verkar dock svårt att hitta det jag söker...

Tidigare har jag arbetat med en databas (mysql) och då har det varit supersmidigt.. Man hämtar det man vill ha och når smidigt via <?=$rec['obj'];?> tex...

Nu tänkte jag att jag skulle kunna använda en xml-fil istället... kunde ju va smart.... Filen ser ut som följer:

<?xml version="1.0" encoding="iso-8859-1"?>
<lektioner>
	<lektion>
		<name>Tillfälle 1: Introduktion</name>
		<datum>2004-10-19</datum>
		
		<moment id="Presentation">
			<info>Jag presenterar mig själv.</info>
		</moment>
		
		<moment id="Förkunskaper">
			<info>Vi reder ut vilka förkunskaper ni har.</info>
		</moment>
		
		<moment id="Planering">
			<info>Visar hur jag har tänkt lägga upp kursen och diskuterar eventuella ändringar</info>
		</moment>
		
		<moment id="'Verkligheten'">
			<info>Går igenom hur det ser ut i "verkligheten". Hur proffsen bygger hemsidor men också hur normalanvändaren går till väga.</info>
		</moment>
		
		<moment id="Introduktion till Frontpage">
			<info>Vi lär oss hur man startar Frontpage och skapar vår första sida.</info>
		</moment>
		
	</lektion>
	
	<lektion>
		<name>Tillfälle 2: Bildbehandling</name>
		<datum>2004-10-26</datum>
		<moment></moment>
	</lektion>
	
	<lektion>
		<name>Tillfälle 3: Tabeller och listor</name>
		<datum>2004-11-02</datum>
		<moment></moment>
	</lektion>
	
	<lektion>
		<name>Tillfälle 4: Länkar och ramar</name>
		<datum>2004-11-09</datum>
		<moment></moment>
	</lektion>
	
	<lektion>
		<name>Tillfälle 5: Avslutning</name>
		<datum>2004-11-16</datum>
		<moment></moment>
	</lektion>
</lektioner>

Sen vill jag kunna hämta tex lektioner->lektion->datum och få de i en tabell/array.
Går detta eller är det så komplicerat som det verkar???

Medlem sedan mars 20007 896 inlägg
#2

Visst skulle det gå utmärkt att göra. Frågan är bara varför? XML är inte en databashanterare, och lämpar sig bäst för att strukturera data (till information) och använda som ett protokoll mellan två kommunikationspunkter. Man lagrar inte data i XML-dokument med fördel, det görs i - ja, just det - MySQL t.ex. :)

Medlem sedan mars 20021 239 inlägg
#3

SPiN skrev:

Visst skulle det gå utmärkt att göra. Frågan är bara varför? XML är inte en databashanterare, och lämpar sig bäst för att strukturera data (till information) och använda som ett protokoll mellan två kommunikationspunkter. Man lagrar inte data i XML-dokument med fördel, det görs i - ja, just det - MySQL t.ex.

Jo, men min data ska inte lagras speciellt länge :D
Jag vill lätt kunna ändra tex datum och då finner jag det smidigare att editera en textfil än skapa databas-adminsystem.... phpMyAdmin går iof men det är jag inte riktigt heller bekväm med...

Någon som kan visa det enklaste exemplet på det jag beskrev ovan? För mig verkar det krångligt ändå.. hittils ;)

Medlem sedan mars 20021 239 inlägg
#4

Ingen som vill visa hur man gör?

Medlem sedan mars 20021 239 inlägg
#5

Frågan är om man lättare kan få ett bra svar i PHP-forumet. Nu börjar det ha gått ett bra tag sen jag skrev tråden och jag är inte riktigt nöjd med svaret..

Det ska göras med php, så där är kanske bättre ställe att fråga. Flytta gärna.

Medlem sedan mars 20021 239 inlägg
#6

Eftersom ingen verkar vilja hjälpa mig kämpar jag vidare själv... Har hittat lite kod och lyckats skriva ut en del saker... Dock är jag inne på djupt vatten och därför behöver jag lite vägledning....

min xml-fil (lektioner.xml):

<?xml version="1.0" encoding="UTF-8" ?>
<lektioner>
	<lektion name="Tillfälle 1: Introduktion">
		<datum>2004-10-19</datum>
		
		<moment id="Presentation">
			Jag presenterar mig själv.
		</moment>
		
		<moment id="Förkunskaper">
			Vi reder ut vilka förkunskaper ni har.
		</moment>
		
		<data>AAA</data>
		
	</lektion>
	
	<lektion name="Tillfälle 2: Bildbehandling">
		<datum>2004-10-26</datum>
		<moment id="T">Info om T</moment>
		<data>CCC</data>
	</lektion>
</lektioner>

xml.php:

<?php
function startElement($parser, $name, $attrs=''){
    global $current_tag, $current_index, $thenames; 
		    $current_tag = $name;
    switch($name){
        case 'LEKTION':
		 	$thenames[$current_index]=$attrs['NAME'];
			$current_index+=1;
        break;
        default:
        break;
    }
}
function endElement($parser, $name, $attrs=''){
    global $current_tag, $current_index;
    switch($name){
        case 'DATUM':
        case 'MOMENT':
        case 'DATA':
		    $current_tag = "";
        break;
        default:
        break;
    }
}

function characterData($parser, $data){
    global $current_tag, $current_index, $datum, $themoment, $thedata;
    switch($current_tag){
        case 'DATUM':
			if (isset($datum[$current_index]))  {
				 $datum[$current_index].=$data;
			}
			else {
				 $datum[$current_index]=$data;
			}
		 break;
        case 'MOMENT':
			if (isset($themoment[$current_index]))  {
				 $themoment[$current_index].=$data;
			}
			else {
				 $themoment[$current_index]=$data;
			}
		 break;
        case 'DATA':
			if (isset($thedata[$current_index]))  {
				 $thedata[$current_index].=$data;
			}
			else {
				 $thedata[$current_index]=$data;
			}
		 break;
    default:
        break;
    }
}

$xml_file = 'lektioner.xml';
$type = 'UTF-8';
$xml_parser = xml_parser_create($type);
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true);
xml_parser_set_option($xml_parser, XML_OPTION_TARGET_ENCODING, 'UTF-8');
xml_set_element_handler($xml_parser, 'startElement','endElement');
xml_set_character_data_handler($xml_parser, 'characterData');

if (!($fp = fopen($xml_file, 'r'))) {
    die("Could not open $xml_file for parsing!\n");
}

$current_index=0;
while ($data = fread($fp, 4096)) {
    if (!($data = utf8_encode($data))) {
        echo 'ERROR'."\n";
    }
	if (!xml_parse($xml_parser, $data, feof($fp))) {
  		die("XML error".xml_error_string(xml_get_error_code($xml_parser)));
	}
}
xml_parser_free($xml_parser);

array_multisort ($thenames, SORT_STRING, $datum, $themoment, $thedata);
 
foreach ( $thenames as $key => $value ) {
	echo "<th>$value</th><br/>";
	echo "Datum: $datum[$key]<br>";
	echo "Moment: $themoment[$key]<br>";
	echo "Data: $thedata[$key]";
	echo "<br><br><br>";
	echo "\n";
}
?>

Utskrift:

Tillfälle 1: Introduktion
Datum: 2004-10-19
Moment: Jag presenterar mig själv. Vi reder ut vilka förkunskaper ni har.
Data: AAA

Tillfälle 2: Bildbehandling
Datum: 2004-10-26
Moment: Info om T
Data: CCC

Nu till problemen: Alla å ä och ö blir fel. Detta har jag inte lyckats lösa... varför blir de så?

Sen har jag flera <moment>-taggar under <lektion>-taggen. Dessa vill jag skriva ut en i taget... gissar på att jag behöver ha en array i themoment-arrayen. Men jag vågar inte börja peta eftersom jag inte har en aning om hur det funkar... Tacksam om någon snabbt hjälper mig med att styra upp det...

Tack!

Medlem sedan juni 200032 967 inlägg
#7

Jag tar och flyttar den här tråden till PHP från XML i alla fall, så får vi hoppas att du blir hjälpt där. :)

Mvh

266 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)