UrMeMedlem sedan apr. 2001762 inlägg Jag måste skapa en sida som tar emot en XML-fil, och i denna XML-fil finns det en bild som är kodad med base64-data. Någon som har en guide/förslag på hur jag tar ut denna data och sparar ner filen till servern?
Så här kan det t.ex se ut:
<content-elements>
<content-element>
<binary-content>base64-encoded binary data</binary-content>
<charset>utf-8</charset>
<content-id>dcs00407.jpg</content-id>
<content-type>image/jpeg</content-type>
<name>dcs00407.jpg</name>
<filename>dcs00407.jpg</filename>
</content-element>
</content-elements>
i <binary-content> ligger då koden för bilden.
Är det bara parsea xml-filen, ta binary-content och köra base64_decode på den, sedan på något sätt spara ner det till servern?
Hmm kanske måste hitta någon lämplig exempelfil.
UrMeMedlem sedan apr. 2001762 inlägg en följdfråga, hur får jag tag i t.ex binary-content?
Detta går ju inte, ger bara felmeddelande:
$xml = simplexml_load_file("xmlfil.xml");
echo $xml->content-element->binary-content;
eftersom namnet innehåller "-".
Prova
echo $xml->'content-element'->'binary-content';
// eller kanske till och med
echo $xml['content-element']['binary-content'];
UrMeMedlem sedan apr. 2001762 inlägg Nej inget av dem fungerar, tror jag måste köra med xpath? Men får inte till hur jag skulle kunna hämta data med xpath, någon som har ett exempel?
Det var en kvalificerad gissning, ändock en gissning. :)
Sättet att komma runt begränsningen med - i tagg-namnen gäller dock fortfarande.
Efter lite googlande kommer jag fram till följande: Den yttersta taggen tolkas som dokumentrot, så $sql innehåller (eller bör innehålla åtminstone) varje content-element. Om du alltid bara har ett content-element bör du kunna skriva
echo $sql['content-element']['binary-content'];
annars bör du kunna gå igenom elementen med en foreach-loop
foreach($xml as $picture){
echo $picture->filename . ": " . $picture['binary-content'] . "\n";
}
SPiNMedlem sedan mars 20007 896 inlägg Exempel i XPath:
$xml = simplexml_load_file('filen.xml');
$binaryContent = $xml->xpath("/content-elements/content-element/binary-content");
$imageType = $xml->xpath("/content-elements/content-element/content-type");
header("content-type: " . $imageType[0]);
print base64_decode($binaryContent[0]);
Viss felhantering får du sköta själv (se till så att du faktiskt har poster på $binaryContent[0] och $imageType[0] t.ex.), men förhoppningsvis så bör ovanstående fungera. Det är dock otestat.
UrMeMedlem sedan apr. 2001762 inlägg Tackar! xpath exemplet fungerar perfekt, hade blandat in lite andra grejer i fredags som ställde till det för mig.