• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Der Sommer ist da! Laue Nächte, lange Abende im Biergarten und Mücken in Heeresstärke - dazu passend lautet das Thema unseres Fotowettbewerbs im Juni Nachtleben --> 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!