1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Unsere jährliche Weihnachts-Banner-Aktion hat begonnen! Wir freuen uns auf viele, viele kreative Vorschläge.
    Mehr dazu könnt Ihr hier nachlesen: Weihnachtsbanner 2016

    Information ausblenden

PHP & SimpleXml

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von mschoening, 08.09.08.

  1. mschoening

    mschoening Gelbe Schleswiger Reinette

    Dabei seit:
    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>
    
     
  2. .holger

    .holger Geflammter Kardinal

    Dabei seit:
    13.09.04
    Beiträge:
    9.117
    vielleicht nur PHP4 oder älter aufm Server laufen?
     
  3. mschoening

    mschoening Gelbe Schleswiger Reinette

    Dabei seit:
    21.02.07
    Beiträge:
    1.764
    Stimmt, thanks!
     
  4. mschoening

    mschoening Gelbe Schleswiger Reinette

    Dabei seit:
    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
     
  5. nevermind

    nevermind Bismarckapfel

    Dabei seit:
    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.
     
  6. mschoening

    mschoening Gelbe Schleswiger Reinette

    Dabei seit:
    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
     
  7. nevermind

    nevermind Bismarckapfel

    Dabei seit:
    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";).
     
  8. mschoening

    mschoening Gelbe Schleswiger Reinette

    Dabei seit:
    21.02.07
    Beiträge:
    1.764
    Hi,
    thanks.

    Funktioniert! Leider nur nicht mit ExpressionEngine als Plugin :D!
     
  9. mschoening

    mschoening Gelbe Schleswiger Reinette

    Dabei seit:
    21.02.07
    Beiträge:
    1.764
    Kann simple_xml auch URLs öffnen oder nur Dateien?
     
  10. mschoening

    mschoening Gelbe Schleswiger Reinette

    Dabei seit:
    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!
     

Diese Seite empfehlen