• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Na, habt Ihr genügend in Stoffen geschwelgt? Dann könntet Ihr Euch jetzt die zahlreichen Einsendungen dieses Monats anschauen und entscheiden, welches Foto davon Euch am Besten gefällt. Hier geht es lang zur Abstimmung --> 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>
 

.holger

Borowitzky
Registriert
13.09.04
Beiträge
8.970
vielleicht nur PHP4 oder älter aufm Server laufen?
 

mschoening

Gelbe Schleswiger Reinette
Registriert
21.02.07
Beiträge
1.764
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
 

nevermind

Bismarckapfel
Registriert
19.12.07
Beiträge
142
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.
 

mschoening

Gelbe Schleswiger Reinette
Registriert
21.02.07
Beiträge
1.764
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
 

nevermind

Bismarckapfel
Registriert
19.12.07
Beiträge
142
xtract: echo $result[0];

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

mschoening

Gelbe Schleswiger Reinette
Registriert
21.02.07
Beiträge
1.764
Hi,
thanks.

Funktioniert! Leider nur nicht mit ExpressionEngine als Plugin :D!
 

mschoening

Gelbe Schleswiger Reinette
Registriert
21.02.07
Beiträge
1.764
Kann simple_xml auch URLs öffnen oder nur Dateien?
 

mschoening

Gelbe Schleswiger Reinette
Registriert
21.02.07
Beiträge
1.764
Nvm,
natürlich geht das. Mein Server wollte nur nicht! fopen ist off. Mache es jetzt mit CURL!