PHP XMLReader
Hallo,
habe jetzt seit Stunden das Internet durchsucht, mir Tutorials zu XMLREADER und XML-LINE angesehen und durchprobiert, aber das passende ist nicht dabei..
ich habe eine Index.xml und möchte dort einen wert auslesen, dieser wert ändert sich öfter mal, aber steht immer in der zweiten Zeile in folgendem Format:
<IndexFile index="ordner:testfile.zip" version="12" />
und ich möchte nur den String "testfile.zip", der sich wie gesagt immer ändert.
Diesen String nehme ich dann, welcher für eine Datei steht, die ich dann runterladen kann...
und muss dann in dieser Datei aus Zeile 8 nach dem selben Muster vorgehen, allerdings benötige ich dort einmal den string "ordner" und einmal den String "testfile2.zip (heißt ja dann anders)
Ich habe das Problem bereits mit batch auf dem pc gelöst, will dies aber nun per php Serverseitig ablaufen lassen.
Bin für jede Konstruktive Hilfe dankbar
Hier noch mein Batch Code:
for /f skip^=1^ tokens^=2^ delims^=^" %%i in ('type "Index.xml"') do (
if not defined filename1 for /f "tokens=2 delims=:" %%j in ("%%i") do (
set "filename1=%%j"
set "basename1=%%~nj"
setlocal EnableDelayedExpansion
endlocal
)
)
for /f skip^=7^ tokens^=2^ delims^=^" %%i in ('type "%basename1%.xml"') do (
if not defined filename2 for /f "tokens=2 delims=:" %%j in ("%%i") do (
set "filename2=%%j"
set "basename2=%%~nj"
setlocal EnableDelayedExpansion
)
)
for /f skip^=7^ tokens^=2^ delims^=^" %%i in ('type "%basename1%.xml"') do (
if not defined filename3 for /f "tokens=1 delims=:" %%j in ("%%i") do (
set "filename3=%%j"
set "basename3=%%~nj"
setlocal EnableDelayedExpansion
)
)
LG
habe jetzt seit Stunden das Internet durchsucht, mir Tutorials zu XMLREADER und XML-LINE angesehen und durchprobiert, aber das passende ist nicht dabei..
ich habe eine Index.xml und möchte dort einen wert auslesen, dieser wert ändert sich öfter mal, aber steht immer in der zweiten Zeile in folgendem Format:
<IndexFile index="ordner:testfile.zip" version="12" />
und ich möchte nur den String "testfile.zip", der sich wie gesagt immer ändert.
Diesen String nehme ich dann, welcher für eine Datei steht, die ich dann runterladen kann...
und muss dann in dieser Datei aus Zeile 8 nach dem selben Muster vorgehen, allerdings benötige ich dort einmal den string "ordner" und einmal den String "testfile2.zip (heißt ja dann anders)
Ich habe das Problem bereits mit batch auf dem pc gelöst, will dies aber nun per php Serverseitig ablaufen lassen.
Bin für jede Konstruktive Hilfe dankbar
Hier noch mein Batch Code:
for /f skip^=1^ tokens^=2^ delims^=^" %%i in ('type "Index.xml"') do (
if not defined filename1 for /f "tokens=2 delims=:" %%j in ("%%i") do (
set "filename1=%%j"
set "basename1=%%~nj"
setlocal EnableDelayedExpansion
"neue1.txt" echo !filename1!
endlocal
)
)
for /f skip^=7^ tokens^=2^ delims^=^" %%i in ('type "%basename1%.xml"') do (
if not defined filename2 for /f "tokens=2 delims=:" %%j in ("%%i") do (
set "filename2=%%j"
set "basename2=%%~nj"
setlocal EnableDelayedExpansion
"neue2.txt" echo !filename2!
endlocal)
)
for /f skip^=7^ tokens^=2^ delims^=^" %%i in ('type "%basename1%.xml"') do (
if not defined filename3 for /f "tokens=1 delims=:" %%j in ("%%i") do (
set "filename3=%%j"
set "basename3=%%~nj"
setlocal EnableDelayedExpansion
"neue3.txt" echo !filename3!
endlocal)
)
LG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 250281
Url: https://administrator.de/contentid/250281
Ausgedruckt am: 24.11.2024 um 23:11 Uhr
4 Kommentare
Neuester Kommentar
So aus der lameng ohne die Struktur der XML Files zu kennen ungetestet etwa so:
Gruß jodel32
<?php
$xml = simplexml_load_file('http://www.domain.de/data.xml');
$result = $xml->xpath('//IndexFile[@index]');
if (count($result) > 0){
$attrValue = $result['index'];
$arr = preg_split('/:/',$attrValue);
$zipName = $arr[1];
// Download Zipfile
file_put_contents("temp.zip", fopen("http://someurl/$zipName", 'r'));
$zip = new ZipArchive;
if ($zip->open('temp.zip') === TRUE) {
$zip->extractTo('/temp/');
$zip->close();
$basename = basename($zipName,'.zip');
$xml2 = simplexml_load_file('/temp/' + $basename + '.xml');
$result2 = $xml->xpath('//IndexFile[@index]');
if (count($result2) > 0){
$attrValue = $result['index'];
$arr = preg_split('/:/',$attrValue);
$ordner = $arr;
$filename = $arr[1];
echo 'Der Ordner lautet:' + $ordner + ' und der Dateiname ' + $filename;
}
} else {
echo 'Konnte ZIPFile nicht extrahieren!';
}
}else{
echo("Keine Element gefunden");
}
?>
das ist eine XPath Query. Diese selektiert das Element das du haben möchtest IndexFile ist der Name des Elements und [@index] bedeutet das das Element ein Attribut mit dem Namen index haben muss.
Siehe:
Gruß jodel32
Siehe:
erhalte folgende Fehlermeldung als Ausgabe
Fatal error: Call to a member function xpath() on a non-object in /home/bla.php on line 18 (in line 18 steht der Code)
dann konnte er die XML-Datei nicht abrufen. URL prüfen.Fatal error: Call to a member function xpath() on a non-object in /home/bla.php on line 18 (in line 18 steht der Code)
Noch zur Klärung
hier: $xml = simplexml_load_file('http://www.domain.de/data.xml'); gebe ich den Ort ein, wo die xml liegt
ja, dort wo sie aus dem Internet abgerufen wird.hier: $xml = simplexml_load_file('http://www.domain.de/data.xml'); gebe ich den Ort ein, wo die xml liegt
was bedeutet das: file_put_contents("temp.zip", fopen("http://someurl/$zipName", 'r'));
das läd das ZIP-File mit dem extrahierten Namen von einer URL runter.Gruß jodel32