Seite 1 von 1

XML-Dokumente auslesen und parsen

Verfasst: 09.03.2008, 13:37
von Melegrian
Bin am verzweifeln, weil ich schon viele Schreibweisen bei einem kleinen Script probiert habe, jedoch ohne Erfolg. So wie der erste Code aussieht, so funktioniert es ohne jedeweden Probleme. Ist jetzt nur verkürzt dargestellt mit einer Position.

Code: Alles auswählen

<?php

$doc = domxml_open_file&#40;"http&#58;//...../datei.xml"&#41;;

$arr = $doc->get_elements_by_tagname&#40;'Item'&#41;;

foreach &#40;$arr as $Inhalt&#41; &#123;
		
     $Gesamt = $Inhalt -> get_elements_by_tagname&#40;'URL'&#41;;

     if &#40;count&#40;$Gesamt&#41; > 0&#41; &#123;$Ergebnisse = $Gesamt&#91;0&#93;;      
        $wieviel = $Ergebnisse->get_content&#40;&#41;; 
        
     &#125;
     print "$wieviel\n";  
  &#125;
?>  
Doch leider reicht es so nicht, weil trotz Wertangabe in [0] das Script einen Error verursacht, wenn in den Abschnitten die Angaben in den Klammern ('URL') sich wiederholen, wie einmal für Textlink und einmal für Imagelink. Nun versuchte ich es etwa so und nichts funktioniert.

Code: Alles auswählen

<?php

$doc = domxml_open_file&#40;"http&#58;//...../datei.xml"&#41;;

$arr = $doc->get_elements_by_tagname&#40;'Item'&#41;;

foreach &#40;$arr as $Schluessel -> $Inhalt&#41; &#123;
		
     $Gesamt = $Schluessel -> $Inhalt -> get_elements_by_tagname&#40;'MediumImage'&#41; -> &#40;'URL'&#41;;

     if &#40;count&#40;$Gesamt&#41; > 0&#41; &#123;$Ergebnisse = $Gesamt&#91;0&#93;;      
        $wieviel = $Ergebnisse->get_content&#40;&#41;; 
        
     &#125;
     print "$wieviel\n";  
  &#125;
?>   
Wie schreibt man das richtig?

Gruß Mele

Verfasst:
von
Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

Verfasst: 09.03.2008, 14:11
von mm
Hallo Melegrian,

ich selbst nutze aus Perfomance-Gründen ungern DOM. Reicht eventuell ein einfacher Match auf regulären Ausdrücken?

Code: Alles auswählen

<?php

$sContent = implode&#40;"", file&#40;"test.xml"&#41;&#41;;
$sNutzdaten = "Hier das, was ich gefunden habe&#58;\n";

while &#40;preg_match&#40;'/<URL>&#40;.+?&#41;<\/URL>/i', $sContent, $matches&#41;&#41; &#123;
	$sNutzdaten .= "\n".$matches&#91;1&#93;;
	$sContent = preg_replace&#40;'/<URL>&#40;.+?&#41;<\/URL>/i', '', $sContent, 1&#41;;
&#125;

echo $sNutzdaten;

?> 
liefert mit dem Inhalt der Datei "text.xml":

Code: Alles auswählen

<dings>
<url>http&#58;//www.test1.de/</url>
<url>http&#58;//www.test2.de/</url>
<url>http&#58;//www.test3.de/</url>
<url>http&#58;//www.test4.de/</url>
</dings>
dieses Ergebnis:

Code: Alles auswählen

Hier das, was ich gefunden habe&#58;

http&#58;//www.test1.de/
http&#58;//www.test2.de/
http&#58;//www.test3.de/
http&#58;//www.test4.de/ 
Hat das geholfen?

Verfasst: 09.03.2008, 18:01
von Melegrian
Nun ja, habe eigentlich nicht viel Erfahrung, will es nur einmal selbst versuchen ein kleines Script zu schreiben. Probiert hatte ich es mit expat, doch da wurde auch das ausgelesen, was nicht angezeigt werden sollte. Nun versuche ich so erst einmal für den Anfang. Das ist die eine Stelle im Scribt, wo es nicht klappt, weil ('FormattedPrice') doppelt ist und bei der URLs ist es dann noch einmal der Fall. Packe ich die in eine eigen foreach Schleife, dann schmeißt der mich aus der Tabelle raus und die Positionen erscheinen über oder unter der Tabelle.

Code: Alles auswählen

    $Preis = $artikel->get_elements_by_tagname&#40;'FormattedPrice'&#41;;

    if &#40;count&#40;$Preis&#41; > 0&#41; &#123;$welcherPreis = $Preis&#91;0&#93;;      
        $derPreis = $welcherPreis->get_content&#40;&#41;; 
    &#125; else &#123;$derPreis = '';
    &#125;
	
   $Preiserlass = $artikel->get_elements_by_tagname&#40;'FormattedPrice'&#41;;   
    
	if &#40;count&#40;$Preiserlass&#41; > 0&#41; &#123;$zweiterPreis = $Preiserlass&#91;0&#93;;      
        $Restpreis = $zweiterPreis->get_content&#40;&#41;; 
    &#125; else &#123;$Restpreis = '';
    &#125;
In der XML sieht es für diesen Abschnitt so aus:

Code: Alles auswählen

<LowestNewPrice>
  <Amount>979</Amount> 
  <CurrencyCode>EUR</CurrencyCode> 
  <FormattedPrice>EUR 9,79</FormattedPrice> 
  </LowestNewPrice>
- <LowestUsedPrice>
  <Amount>693</Amount> 
  <CurrencyCode>EUR</CurrencyCode> 
  <FormattedPrice>EUR 6,93</FormattedPrice> 
  </LowestUsedPrice>
Wenn man den nächst höheren Tag angibt, LowestNewPrice und LowestUsedPrice, so würden die unformatierten Angaben mit erscheinen.
Hier der Anfang als Testseite - https://www.meridianerland.com/test/probe.php

Verfasst:
von

Verfasst: 09.03.2008, 20:45
von nachfrag
Hallo,
ich würde das mit PHP5 und simpleXML machen:
https://de.php.net/simplexml

Grüße

Verfasst: 09.03.2008, 21:10
von Melegrian
Hatte von Amazon vor cirka zwei Wochen eine Mail erhalten, dass wegen einer Umstellung von ECS 3.0 auf ECS 4.0 sich einiges geändert hat und ab Ende März der bisherige Server nicht mehr erreichbar sein soll. Ein Script mit simpleXML hatte ich mir geholt und es läuft nur bei einen von vier Webpaketen, verteilt bei verschiedenen Providern. Hatte dann begonnen mich selbst mit der Materie zu beschäftigen und mich nun so reingesteigert, dass ich es auch begreifen möchte, was da schief läuft. Brauchte es nicht mehr, weil auch Jaap van Ganswijk seit gestern hier auf der Seite https://www.chipdir.nl/amazon/ neue Scripte anbietet.