• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

PHP & SimpleXml

mschoening

Gelbe Schleswiger Reinette
Registriert
21.02.07
Beiträge
1.764
Hi,
bei diesem "script" stimmt irgendwas nicht:

Code:
<?php

if (file_exists('ranking.xml')) {
	$xml = simplexml_load_file('ranking.xml');

	echo $xml->rank[1];
}

else {
	exit('Konnte Datei nicht laden.');
}

?>

Ich bekomme immer folgenden Fehler:

Code:
Fatal error: Call to undefined function: simplexml_load_file() in /home/17946/domains/mydeejays.com/html/beta/test.php on line 4

Woran liegt das?

Die XML dazu sieht so aus:

Code:
<?xml version="1.0" encoding="utf-8" ?>

<apfeltalk>
	<rank id="1">Hello World</rank>
	
	<rank id="2">Foo</rank>
	
	<rank id="3">Bar</rank>
</apfeltalk>
 
vielleicht nur PHP4 oder älter aufm Server laufen?
 
Wie kann ich das denn so umschreiben, dass PHP sich nicht das Element nach der Anzahl der Elemente aussucht sondern nach der id="" des jeweiligen?

Thanks,
Max
 
simplexml kann xpath:
Code:
$xml = simplexml_load_file($file);
$path = "/pfad/zum/element[@id=".$id."]/pfad/zu/kindelementen";
$result = $xml->xpath($path);
ähnlich wie in java. Google xpath for more info ;-)

mit XMLReader:
Code:
$reader = new XMLReader();
$reader->open($file);	
while($reader->read()) {	
   if($reader->nodeType == XMLReader::ELEMENT) {
      if ($reader->localName == "gesuchtesElement" && $reader->getAttribute('id') == $id) {//do sth}
   } 
   else $reader->next();
}
$reader->close();

Afaik braucht xpath deutlich mehr Speicher als xmlreader (Quelle müsste ich suchen), ist aber einfacher zu handhaben.
 
Hi,
was mache ich denn hier falsch:

Code:
<?php
	$file = 'test.xml';
	$id = '2';

	$xml = simplexml_load_file($file);
	$path = "/list/artist[@id=".$id."]/rank";
	$result = $xml->xpath($path);
	
	echo $result;
?>

Code:
<?xml version="1.0" encoding="utf-8"?>

<list>
	<artist id="1">
		<name>Edu Reyes</name>
		
		<rank>1</rank>
		
		<country>Spain</country>
	</artist>

	<artist id="2">
		<name>Wally Lopez</name>
		
		<rank>2</rank>
		
		<country>Spain</country>
	</artist>

	<artist id="3">
		<name>Danny Tenaglia</name>
		
		<rank>3</rank>
		
		<country>United States</country>
	</artist>
</list>

Ich bekomme ales echo das Wort Array. Ich möchte aber den Wert zwischen <rank></rank> haben (im Beispiel also 2).

Thanks,
Max
 
xtract: echo $result[0];

Xpath liefert einen Array zurück, da eine Query auch mehere Ergebnisse liefern kann (z.B. $path = "/list/artist/name";).
 
Hi,
thanks.

Funktioniert! Leider nur nicht mit ExpressionEngine als Plugin :D!
 
Kann simple_xml auch URLs öffnen oder nur Dateien?
 
Nvm,
natürlich geht das. Mein Server wollte nur nicht! fopen ist off. Mache es jetzt mit CURL!