---
title: "Hämta info från xml-fil"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/112068-hämta-info-från-xml-fil"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Type"
published: "2004-09-21T19:55:20.000Z"
updated: "2004-09-23T10:39:38.000Z"
replies: 6
views: 420
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/112068-hämta-info-från-xml-fil"
---

# Hämta info från xml-fil

## #1 — Type, 2004-09-21T19:55Z

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???

Permalänk: https://www.webforum.nu/p/112068

## #2 — SPiN, 2004-09-21T20:18Z

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. :)

Permalänk: https://www.webforum.nu/p/1443173

## #3 — Type, 2004-09-21T20:33Z

> **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 ;)

Permalänk: https://www.webforum.nu/p/1443182

## #4 — Type, 2004-09-21T22:53Z

Ingen som vill visa hur man gör?

Permalänk: https://www.webforum.nu/p/1443239

## #5 — Type, 2004-09-22T22:06Z

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.

Permalänk: https://www.webforum.nu/p/1443710

## #6 — Type, 2004-09-23T10:35Z

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
<?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!

Permalänk: https://www.webforum.nu/p/1443829

## #7 — @nders, 2004-09-23T10:39Z

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

Permalänk: https://www.webforum.nu/p/1443834

---

Tråden på webben: https://www.webforum.nu/amne/php/112068-hämta-info-från-xml-fil
