Hallo!
Ich möchte eine XML-Datei parsen, die aus 10 einzelnen Sets besteht.
Diese Datei sieht im Grunde so aus:
---
<?xml version="1.0" encoding="UTF-8"?><ProductInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xyz.xsd">
<Details url="http://www.amazon.de/exec/obidos/ASIN/B000055Z95">
<Asin>B000055Z95</Asin>
<ProductName>Projekt: Peacemaker</ProductName>
<Catalog>DVD</Catalog>
<ReleaseDate>22. August 2002</ReleaseDate>
<Manufacturer>Universal/4 Front Video</Manufacturer>
<ImageUrlSmall>http://images-eu.amazon.com/images/P...3.THUMBZZZ.jpg</ImageUrlSmall>
<ImageUrlMedium>http://images-eu.amazon.com/images/P...3.MZZZZZZZ.jpg</ImageUrlMedium>
<ImageUrlLarge>http://images-eu.amazon.com/images/P...3.LZZZZZZZ.jpg</ImageUrlLarge>
<ListPrice>EUR 0,00</ListPrice>
<OurPrice>EUR 9,99</OurPrice>
<UsedPrice>EUR 4,99</UsedPrice>
</Details>
<Details url="http://www.amazon.de/exec/obidos/ASIN/B00005UMYY">
<Asin>B00005UMYY</Asin>
<ProductName>Memento (2 DVDs)</ProductName>
<Catalog>DVD</Catalog>
<ReleaseDate>09. Juli 2002</ReleaseDate>
<Manufacturer>Columbia Tristar Home Video</Manufacturer>
<ImageUrlSmall>http://images-eu.amazon.com/images/P...3.THUMBZZZ.jpg</ImageUrlSmall>
<ImageUrlMedium>http://images-eu.amazon.com/images/P...3.MZZZZZZZ.jpg</ImageUrlMedium>
<ImageUrlLarge>http://images-eu.amazon.com/images/P...3.LZZZZZZZ.jpg</ImageUrlLarge>
<ListPrice>EUR 32,99</ListPrice>
<OurPrice>EUR 28,99</OurPrice>
<UsedPrice>EUR 39,99</UsedPrice>
</Details>
<Details url="http://www.amazon.de/exec/obidos/ASIN/B00005U51E">
<Asin>B00005U51E</Asin>
<ProductName>Mulholland Drive - Strasse der Finsternis</ProductName>
<Catalog>DVD</Catalog>
<ReleaseDate>02. Oktober 2002</ReleaseDate>
<Manufacturer>Concorde Video</Manufacturer>
<ImageUrlSmall>http://images-eu.amazon.com/images/P...3.THUMBZZZ.jpg</ImageUrlSmall>
<ImageUrlMedium>http://images-eu.amazon.com/images/P...3.MZZZZZZZ.jpg</ImageUrlMedium>
<ImageUrlLarge>http://images-eu.amazon.com/images/P...3.LZZZZZZZ.jpg</ImageUrlLarge>
<ListPrice>EUR 19,99</ListPrice>
<OurPrice>EUR 14,99</OurPrice>
<UsedPrice>EUR 10,99</UsedPrice>
</Details>
<Details url="http://www.amazon.de/exec/obidos/ASIN/B00005OOJI">
<Asin>B00005OOJI</Asin>
<ProductName>Pioneer A-509-R Hifi-Verstärker schwarz</ProductName>
<Catalog>Electronics</Catalog>
<Manufacturer>Pioneer Electronics Deutschland GmbH</Manufacturer>
<ImageUrlSmall>http://images-eu.amazon.com/images/P...3.THUMBZZZ.jpg</ImageUrlSmall>
<ImageUrlMedium>http://images-eu.amazon.com/images/P...3.MZZZZZZZ.jpg</ImageUrlMedium>
<ImageUrlLarge>http://images-eu.amazon.com/images/P...3.LZZZZZZZ.jpg</ImageUrlLarge>
<ListPrice>EUR 0,00</ListPrice>
<OurPrice>EUR 229,00</OurPrice>
</Details>
<Details url="http://www.amazon.de/exec/obidos/ASIN/B00004RYBA">
<Asin>B00004RYBA</Asin>
<ProductName>Fargo</ProductName>
<Catalog>DVD</Catalog>
<ReleaseDate>01. Juni 1998</ReleaseDate>
<Manufacturer>Concorde Video</Manufacturer>
<ImageUrlSmall>http://images-eu.amazon.com/images/P...3.THUMBZZZ.jpg</ImageUrlSmall>
<ImageUrlMedium>http://images-eu.amazon.com/images/P...3.MZZZZZZZ.jpg</ImageUrlMedium>
<ImageUrlLarge>http://images-eu.amazon.com/images/P...3.LZZZZZZZ.jpg</ImageUrlLarge>
<ListPrice>EUR 24,99</ListPrice>
<OurPrice>EUR 16,99</OurPrice>
<UsedPrice>EUR 9,40</UsedPrice>
</Details>
<Details url="http://www.amazon.de/exec/obidos/ASIN/B00005YU8I">
<Asin>B00005YU8I</Asin>
<ProductName>Der amerikanische Soldat (2 DVDs)</ProductName>
<Catalog>DVD</Catalog>
<ReleaseDate>25. April 2002</ReleaseDate>
<Manufacturer>EMS GmbH</Manufacturer>
<ImageUrlSmall>http://images-eu.amazon.com/images/P...3.THUMBZZZ.jpg</ImageUrlSmall>
<ImageUrlMedium>http://images-eu.amazon.com/images/P...3.MZZZZZZZ.jpg</ImageUrlMedium>
<ImageUrlLarge>http://images-eu.amazon.com/images/P...3.LZZZZZZZ.jpg</ImageUrlLarge>
<ListPrice>EUR 0,00</ListPrice>
<OurPrice>EUR 22,99</OurPrice>
<UsedPrice>EUR 17,99</UsedPrice>
</Details>
<Details url="http://www.amazon.de/exec/obidos/ASIN/B00014TQ7S">
<Asin>B00014TQ7S</Asin>
<ProductName>Franz Ferdinand</ProductName>
<Catalog>Music</Catalog>
<Artists>
<Artist>Franz Ferdinand</Artist>
</Artists>
<ReleaseDate>16. Februar 2004</ReleaseDate>
<Manufacturer>Domino (Rough Trade)</Manufacturer>
<ImageUrlSmall>http://images-eu.amazon.com/images/P...3.THUMBZZZ.jpg</ImageUrlSmall>
<ImageUrlMedium>http://images-eu.amazon.com/images/P...3.MZZZZZZZ.jpg</ImageUrlMedium>
<ImageUrlLarge>http://images-eu.amazon.com/images/P...3.LZZZZZZZ.jpg</ImageUrlLarge>
<ListPrice>EUR 13,99</ListPrice>
<OurPrice>EUR 12,99</OurPrice>
<UsedPrice>EUR 13,19</UsedPrice>
</Details>
.
.
.
</ProductInfo>
---
Nun möchte ich es aber so haben, dass ich die Werte entsprechenden Variablen zuweise.
Als Beispiel (für $q=0) möchte ich das erste der zehn Erbenisse zuweisen:
$topasin[$q]=[Wert der ersten ASIN]
$topimage[$q]=[Wert aus dem ersten ImageUrlSmall]
usw.
danach $q++ und das zweite Ergebnis zuweisen, dann wieder $q++ und das dritte Ergebnis zuweisen.
Wie stelle ich das am besten an?
Ich habe es bisher so gemacht:
//*****************************************
function StartElement($parser, $name, $attrs) {
global $identifier;
$identifier=$name;
}
function EndElement($parser, $name) {
global $set, $identifier, $data, $q, $topasin, $topimage, $toppreis, $topname, $debug, $errormsg;
//echo $identifier." - ".$set[$identifier]."<br>";
if (trim($identifier)=="ASIN")
{
$q++;
$set["IMAGEURLSMALL"]="";
$set["OURPRICE"]="";
$set["ERRORMSG"]="";
$set["PRODUCTNAME"]="";
// Nicht benötigt
$set["AVAILABILITY"]="";
$set["LISTPRICE"]="";
$set["USEDPRICE"]="";
$set["IMAGEURLLARGE"]="";
$set["IMAGEURLMEDIUM"]="";
$set["MANUFACTURER"]="";
$set["RELEASEDATE"]="";
$set["AUTHOR"]="";
$set["CATALOG"]="";
//
$topasin[$q]=trim(utf8_decode($set[$identifier]));
}
if ($debug=="1")
{
echo $identifier."<br>";
echo $set[$identifier]."<br>";
}
if ($identifier=="ERRORMSG") $errormsg=trim(utf8_decode($set[$identifier]));
if ($identifier=="PRODUCTNAME")
{
$topname[$q]=trim(utf8_decode($set[$identifier]));
$topname[$q]=str_replace("&"," & ",$topname[$q]);
}
if ($identifier=="IMAGEURLSMALL") $topimage[$q]=trim(utf8_decode($set[$identifier]));
if ($identifier=="OURPRICE")
{
$toppreis[$q]=trim(utf8_decode($set[$identifier]));
$toppreis[$q]=str_replace(",",".",$toppreis[$q]);
$toppreis[$q]=str_replace("EUR ","",$toppreis[$q]);
}
}
function CharacterData($parser, $data) {
global $set, $identifier;
$data=trim($data);
if ($data && $identifier != "ASIN") $set[$identifier].=$data;
elseif ($data && $identifier == "ASIN") $set[$identifier]=$data;
}
//***************************************************
Irgendwie klappt das aber nicht immer richtig...
Die Werte (außer ASIN) funktionieren auf diese Art und Weise ganz gut. Die ASIN hingegen wird teilweise leider abgeschnitten...
Ich schätze mal, ich mache das sowieso viel zu kompliziert...
Also, wer kann mir einen Tip geben, wie ich die Daten in entsprechende Arrays einlesen kann?
SupervielenliebenDank!
Gruß,
Gerti
Ich möchte eine XML-Datei parsen, die aus 10 einzelnen Sets besteht.
Diese Datei sieht im Grunde so aus:
---
<?xml version="1.0" encoding="UTF-8"?><ProductInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xyz.xsd">
<Details url="http://www.amazon.de/exec/obidos/ASIN/B000055Z95">
<Asin>B000055Z95</Asin>
<ProductName>Projekt: Peacemaker</ProductName>
<Catalog>DVD</Catalog>
<ReleaseDate>22. August 2002</ReleaseDate>
<Manufacturer>Universal/4 Front Video</Manufacturer>
<ImageUrlSmall>http://images-eu.amazon.com/images/P...3.THUMBZZZ.jpg</ImageUrlSmall>
<ImageUrlMedium>http://images-eu.amazon.com/images/P...3.MZZZZZZZ.jpg</ImageUrlMedium>
<ImageUrlLarge>http://images-eu.amazon.com/images/P...3.LZZZZZZZ.jpg</ImageUrlLarge>
<ListPrice>EUR 0,00</ListPrice>
<OurPrice>EUR 9,99</OurPrice>
<UsedPrice>EUR 4,99</UsedPrice>
</Details>
<Details url="http://www.amazon.de/exec/obidos/ASIN/B00005UMYY">
<Asin>B00005UMYY</Asin>
<ProductName>Memento (2 DVDs)</ProductName>
<Catalog>DVD</Catalog>
<ReleaseDate>09. Juli 2002</ReleaseDate>
<Manufacturer>Columbia Tristar Home Video</Manufacturer>
<ImageUrlSmall>http://images-eu.amazon.com/images/P...3.THUMBZZZ.jpg</ImageUrlSmall>
<ImageUrlMedium>http://images-eu.amazon.com/images/P...3.MZZZZZZZ.jpg</ImageUrlMedium>
<ImageUrlLarge>http://images-eu.amazon.com/images/P...3.LZZZZZZZ.jpg</ImageUrlLarge>
<ListPrice>EUR 32,99</ListPrice>
<OurPrice>EUR 28,99</OurPrice>
<UsedPrice>EUR 39,99</UsedPrice>
</Details>
<Details url="http://www.amazon.de/exec/obidos/ASIN/B00005U51E">
<Asin>B00005U51E</Asin>
<ProductName>Mulholland Drive - Strasse der Finsternis</ProductName>
<Catalog>DVD</Catalog>
<ReleaseDate>02. Oktober 2002</ReleaseDate>
<Manufacturer>Concorde Video</Manufacturer>
<ImageUrlSmall>http://images-eu.amazon.com/images/P...3.THUMBZZZ.jpg</ImageUrlSmall>
<ImageUrlMedium>http://images-eu.amazon.com/images/P...3.MZZZZZZZ.jpg</ImageUrlMedium>
<ImageUrlLarge>http://images-eu.amazon.com/images/P...3.LZZZZZZZ.jpg</ImageUrlLarge>
<ListPrice>EUR 19,99</ListPrice>
<OurPrice>EUR 14,99</OurPrice>
<UsedPrice>EUR 10,99</UsedPrice>
</Details>
<Details url="http://www.amazon.de/exec/obidos/ASIN/B00005OOJI">
<Asin>B00005OOJI</Asin>
<ProductName>Pioneer A-509-R Hifi-Verstärker schwarz</ProductName>
<Catalog>Electronics</Catalog>
<Manufacturer>Pioneer Electronics Deutschland GmbH</Manufacturer>
<ImageUrlSmall>http://images-eu.amazon.com/images/P...3.THUMBZZZ.jpg</ImageUrlSmall>
<ImageUrlMedium>http://images-eu.amazon.com/images/P...3.MZZZZZZZ.jpg</ImageUrlMedium>
<ImageUrlLarge>http://images-eu.amazon.com/images/P...3.LZZZZZZZ.jpg</ImageUrlLarge>
<ListPrice>EUR 0,00</ListPrice>
<OurPrice>EUR 229,00</OurPrice>
</Details>
<Details url="http://www.amazon.de/exec/obidos/ASIN/B00004RYBA">
<Asin>B00004RYBA</Asin>
<ProductName>Fargo</ProductName>
<Catalog>DVD</Catalog>
<ReleaseDate>01. Juni 1998</ReleaseDate>
<Manufacturer>Concorde Video</Manufacturer>
<ImageUrlSmall>http://images-eu.amazon.com/images/P...3.THUMBZZZ.jpg</ImageUrlSmall>
<ImageUrlMedium>http://images-eu.amazon.com/images/P...3.MZZZZZZZ.jpg</ImageUrlMedium>
<ImageUrlLarge>http://images-eu.amazon.com/images/P...3.LZZZZZZZ.jpg</ImageUrlLarge>
<ListPrice>EUR 24,99</ListPrice>
<OurPrice>EUR 16,99</OurPrice>
<UsedPrice>EUR 9,40</UsedPrice>
</Details>
<Details url="http://www.amazon.de/exec/obidos/ASIN/B00005YU8I">
<Asin>B00005YU8I</Asin>
<ProductName>Der amerikanische Soldat (2 DVDs)</ProductName>
<Catalog>DVD</Catalog>
<ReleaseDate>25. April 2002</ReleaseDate>
<Manufacturer>EMS GmbH</Manufacturer>
<ImageUrlSmall>http://images-eu.amazon.com/images/P...3.THUMBZZZ.jpg</ImageUrlSmall>
<ImageUrlMedium>http://images-eu.amazon.com/images/P...3.MZZZZZZZ.jpg</ImageUrlMedium>
<ImageUrlLarge>http://images-eu.amazon.com/images/P...3.LZZZZZZZ.jpg</ImageUrlLarge>
<ListPrice>EUR 0,00</ListPrice>
<OurPrice>EUR 22,99</OurPrice>
<UsedPrice>EUR 17,99</UsedPrice>
</Details>
<Details url="http://www.amazon.de/exec/obidos/ASIN/B00014TQ7S">
<Asin>B00014TQ7S</Asin>
<ProductName>Franz Ferdinand</ProductName>
<Catalog>Music</Catalog>
<Artists>
<Artist>Franz Ferdinand</Artist>
</Artists>
<ReleaseDate>16. Februar 2004</ReleaseDate>
<Manufacturer>Domino (Rough Trade)</Manufacturer>
<ImageUrlSmall>http://images-eu.amazon.com/images/P...3.THUMBZZZ.jpg</ImageUrlSmall>
<ImageUrlMedium>http://images-eu.amazon.com/images/P...3.MZZZZZZZ.jpg</ImageUrlMedium>
<ImageUrlLarge>http://images-eu.amazon.com/images/P...3.LZZZZZZZ.jpg</ImageUrlLarge>
<ListPrice>EUR 13,99</ListPrice>
<OurPrice>EUR 12,99</OurPrice>
<UsedPrice>EUR 13,19</UsedPrice>
</Details>
.
.
.
</ProductInfo>
---
Nun möchte ich es aber so haben, dass ich die Werte entsprechenden Variablen zuweise.
Als Beispiel (für $q=0) möchte ich das erste der zehn Erbenisse zuweisen:
$topasin[$q]=[Wert der ersten ASIN]
$topimage[$q]=[Wert aus dem ersten ImageUrlSmall]
usw.
danach $q++ und das zweite Ergebnis zuweisen, dann wieder $q++ und das dritte Ergebnis zuweisen.
Wie stelle ich das am besten an?
Ich habe es bisher so gemacht:
//*****************************************
function StartElement($parser, $name, $attrs) {
global $identifier;
$identifier=$name;
}
function EndElement($parser, $name) {
global $set, $identifier, $data, $q, $topasin, $topimage, $toppreis, $topname, $debug, $errormsg;
//echo $identifier." - ".$set[$identifier]."<br>";
if (trim($identifier)=="ASIN")
{
$q++;
$set["IMAGEURLSMALL"]="";
$set["OURPRICE"]="";
$set["ERRORMSG"]="";
$set["PRODUCTNAME"]="";
// Nicht benötigt
$set["AVAILABILITY"]="";
$set["LISTPRICE"]="";
$set["USEDPRICE"]="";
$set["IMAGEURLLARGE"]="";
$set["IMAGEURLMEDIUM"]="";
$set["MANUFACTURER"]="";
$set["RELEASEDATE"]="";
$set["AUTHOR"]="";
$set["CATALOG"]="";
//
$topasin[$q]=trim(utf8_decode($set[$identifier]));
}
if ($debug=="1")
{
echo $identifier."<br>";
echo $set[$identifier]."<br>";
}
if ($identifier=="ERRORMSG") $errormsg=trim(utf8_decode($set[$identifier]));
if ($identifier=="PRODUCTNAME")
{
$topname[$q]=trim(utf8_decode($set[$identifier]));
$topname[$q]=str_replace("&"," & ",$topname[$q]);
}
if ($identifier=="IMAGEURLSMALL") $topimage[$q]=trim(utf8_decode($set[$identifier]));
if ($identifier=="OURPRICE")
{
$toppreis[$q]=trim(utf8_decode($set[$identifier]));
$toppreis[$q]=str_replace(",",".",$toppreis[$q]);
$toppreis[$q]=str_replace("EUR ","",$toppreis[$q]);
}
}
function CharacterData($parser, $data) {
global $set, $identifier;
$data=trim($data);
if ($data && $identifier != "ASIN") $set[$identifier].=$data;
elseif ($data && $identifier == "ASIN") $set[$identifier]=$data;
}
//***************************************************
Irgendwie klappt das aber nicht immer richtig...
Die Werte (außer ASIN) funktionieren auf diese Art und Weise ganz gut. Die ASIN hingegen wird teilweise leider abgeschnitten...
Ich schätze mal, ich mache das sowieso viel zu kompliziert...
Also, wer kann mir einen Tip geben, wie ich die Daten in entsprechende Arrays einlesen kann?
SupervielenliebenDank!
Gruß,
Gerti
Kommentar