externe XML-Datei verarbeiten

Methos

Erfahrenes Mitglied
Bin gerade dabei mich ein wenig in xml einzuarbeiten.
Hab bisher immer alles lokal geteste wollte nun aber mal versuchen eine externe xml Datei zu verarbeiten.

Hier der lokale Versuch:
PHP:
$Items = simplexml_load_file(file.xml);

füge ich statt file.xml die URL ein klappt das Skript leider nicht mehr.
 
Zuletzt bearbeitet:
danke für deine Antwort.
Ich hab das mal so abgeändert:

PHP:
$data = file_get_contents('http://webservices.amazon.de/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=05TZZ2SDS7AXGAHBV9R2&Operation=ItemLookup&IdType=ASIN&ItemId=3608932224&ResponseGroup=Small');
$xml = simplexml_load_string($data);
var_dump($xml);
$ItemLookupResponse = simplexml_load_string($data);
foreach ($ItemLookupResponse->Items->Item->ItemAttributes as $book) {
  $authors = '';
  foreach ($book->Author as $author) {
    $authors .= empty($authors) ? $author : ', ' . $author;
  }
  printf(
    "<b>%s</b><br> \"%s\" <br> %s<br> %s <br>%s<hr>",

    $ItemLookupResponse->Items->Item->ItemAttributes->Title,
    $authors,
    $ItemLookupResponse->Items->Item->ItemAttributes->Creator,
    $ItemLookupResponse->Items->Item->ItemAttributes->Manufacturer,
    $ItemLookupResponse->Items->Item->ItemAttributes->ProductGroup
  );
}

?>

Damit schreibt er schon mal den Text so wie er sollte, allerdings auch noch jede Menge code davor.
Die Umlaute müssen scheinbar auch noch extra vorher bearbeitet werden, da diese auch nicht richtig dargestellt werden können.
 
Der Code kommt von dem wahrscheinlich für Testzwecke eingebautem var_dump();

PHP:
<?php
$data = file_get_contents('http://webservices.amazon.de/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=05TZZ2SDS7AXGAHBV9R2&Operation=ItemLookup&IdType=ASIN&ItemId=3608932224&ResponseGroup=Small'); 
$xml = simplexml_load_string($data); 
//var_dump($xml); <-- rausnehmen oder auskommentieren
$ItemLookupResponse = simplexml_load_string($data); 
foreach ($ItemLookupResponse->Items->Item->ItemAttributes as $book) { 
  $authors = ''; 
  foreach ($book->Author as $author) { 
    $authors .= empty($authors) ? $author : ', ' . $author; 
  } 
  printf( 
    "<b>%s</b><br> \"%s\" <br> %s<br> %s <br>%s<hr>", 

    $ItemLookupResponse->Items->Item->ItemAttributes->Title, 
    $authors, 
    $ItemLookupResponse->Items->Item->ItemAttributes->Creator, 
    $ItemLookupResponse->Items->Item->ItemAttributes->Manufacturer, 
    $ItemLookupResponse->Items->Item->ItemAttributes->ProductGroup 
  ); 
} 

?>

Die Umlaute zu konvertieren sollte nicht so schwer sein, aber ich bin grad ziemlich müde und mir fällt grad nicht ein wie es am bequemsten zu lösen ist (gibt bestimmt ne Funktion dafür oder ein Tutorial zu dem Thema). Ich lass es dich wissen, wenn mir morgen was dazu eingefallen ist :-)
 
Zuletzt bearbeitet:
stimmt du hattest Recht, das kommt daher.

Habs jetzt mal so versucht mit den Umlauten:

PHP:
    $replacePairs = array(
            'ä' => '&#228',
            'ö' => '&#246',
            'ü' => '&#252'
        );
$data =  strtr($data, $replacePairs);

mit einem text klappt das ohne Probleme. Wenn ich es dann mit der xml datei versuche gehts nicht mehr.

Kann man die xml Datei eigentlich noch anders holen? Außer mit file_get_contents? Denn dafür muß ja url_fopen auf on sein.
 
Für jede Anfrage von PHP muss, soweit ich weiß, allow_url_fopen an sein.

PHP:
function umlaute_replace($item) {
	$umlaute = array('ä','ö','ü','ß','Ä','Ö','Ü',"“","â€?","’","–","—","…","&nbsp;",chr(196), chr(228),chr(214),chr(246),chr(220),chr(252),chr(223),utf8_encode('Ä'),utf8_encode('ä'),utf8_encode('Ö'),utf8_encode('ö'),utf8_encode('Ü'),utf8_encode('ü'),utf8_encode('ß'),utf8_encode('?'));
	$htmlcode = array('&auml;','&ouml;','&uuml;','&szlig;','&Auml;','&Ouml;','&Uuml;','"','"','´','–','—','...',' ','Ä','ä','Ö','ö','Ü','ü','ß','Ä','ä','Ö','ö','Ü','ü','ß','?');
	$item = str_replace($umlaute,$htmlcode,$item);
	return $item;
}
Diese kleine Funktion sollte dir behilflich sein...
 
Wieso nicht einfach mit einer Kodierung arbeiten, mit der Zeichenreferenzen unnötig sind, wie etwa UTF-8? Diese wird auch im XML-Dokument verwendet und eine Anpassung ist somit nicht mehr nötig.
 
@Gumbo stimmt natürlich :) dann werden die Umlaute korrekt angezeigt. thx an alle

Aber nochmal auf fopen zurückzukommen. Ich würde es eigenltich nur ungern aktivieren, da es aus Sicherheitsgründen ja nicht so gut wär. Deswegen die Frage ob es da noch andere Möglichkeiten gibt?
 
Zuletzt bearbeitet:
Die wohl letzte Möglichkeit wäre die fsockopen()-Funktion. Dabei müsstest du allerdings eine vollständige HTTP-Anfrage selbst zusammenbasteln und auch die vollständige HTTP-Antwort selbst auseinandernehmen.
 
ja werd ich mir wohl oder übel anschauen müssen, denn dies wäre auf jeden Fall sicherer.
Mal schauen ob ich das so hinbekomme.

Ansonsten würd ich mich nochmal melden wenn ich darf :-(
 
Zurück