• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

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!