/ fwrite Frage & Frage zum Erstellen einer XML Datei ...
Compu
- php
0 Compu0 Klaus Mock0 Compu
Guten Morgen,
ich hatte vor ein paar Tagen schon einmal gepostet.
Ich habe von meinem Chef eine Schnittstellenbeschreibung für eine XML Datei bekommen. Ich bin aber absoluter XML Neuling. Hatte mich letzte Wocher erst in XML reingelesen. Man riet mir vor ein paar Tagen die XML Datei mit php zzu erstellen, da ich ohnehin php4 für meine Webseiten benutze.
Jetzt habe ich kurzes Script programmiert.
Ersten Problem, ich bekomme in der for Schleife zigmal die Fehlermeldung:
Warning: fwrite(): 3 is not a valid File-Handle resource in d:\dentona\pages\unodent-xml-export.php on line 68,69,70,71,72,...
Außerdem habe ich eine Frage wie genau die XML Datei aussehen muss.
Die hat ja so eine Baumstruktur. Wir jede Zeile mit neuen öffnen/schließenden Tags um 4 Stellen eingerückt?
Ich habe mal versucht mit phpmyadmin eine Tabelle in xml zu exportieren, da sah man dann auch Bindestriche. Was hat es damit auf sich? Braucht man die?
Danke
Hi,
habe vergessen das Script zu posten, sonst sieht man ja nicht wo der Fehler liegt:
$sql = "SELECT *
FROM artikeldetails ad,
bestellinfo bi,
de_produktinfo de_pi,
produktinfo pi,
produktkategorie pk,
produktkuerzel pkue
WHERE (ad.d_artikelnummer = bi.d_artikelnummer)
AND (bi.d_produktname = de_pi.d_produktname)
AND (pi.d_produktname = de_pi.d_produktname)
AND (pkue.d_produktname = bi.d_produktname)
AND (pkue.d_kategorie = pk.id)";
$result = mysql_query($sql, $dbConnection);
$artikelsatzNumRows = mysql_num_rows($result);
// Einrückungen
$e8 = " ";
$e16 = " ";
while ($row = mysql_fetch_array($result))
{
$artikelsatz[$row['d_artikelnummer']]['aktion'] = $e8."<aktion>0</aktion>\n";
$artikelsatz[$row['d_artikelnummer']]['artikelnummer'] = $e8."<artikelnummer>".$row['d_artikelnummer']."</artikelnummer>\n";
$artikelsatz[$row['d_artikelnummer']]['artikelbezeichnung'] = $e8."<artikelbezeichnung>".$row['d_artikelnummer']."</artikelbezeichnung>\n";
$artikelsatz[$row['d_artikelnummer']]['verpackungseinheit'] = $e8."<verpackungseinheit>".$row['d_vpe']."</verpackungseinheit>\n";
}
$filename = 'artikelstamm.txt';
if(!file_exists($filename))
{
print "Datei nicht gefunden!";
}
elseif(is_writable($filename))
{
{
print "xml Datei wird erstellt ...";
$handle = fopen("artikelstamm.txt", "w");
for($i=0; $i<$artikelsatzNumRows; $i++)
{
fwrite($handle, "<artikelstamm>\n");
fwrite($handle, " <artikelsatz>\n");
fwrite($handle, $artikelsatz[$i]['aktion']);
fwrite($handle, $artikelsatz[$i]['artikelnummer']);
fwrite($handle, $artikelsatz[$i]['artikelbezeichnung']);
fwrite($handle, $artikelsatz[$i]['verpackungseinheit']);
fwrite($handle, " </artikelsatz>\n");
fwrite($handle, "</artikelstamm>\n");
fclose($handle);
}
print "<br><br>xml Datei wurde erfolgreich erstellt!";
}
}
else
{
print " Die Datei ist nicht beschreibbar. ";
}
?>
</body>
</html>
Hallo,
Warning: fwrite(): 3 is not a valid File-Handle resource in d:\dentona\pages\unodent-xml-export.php on line 68,69,70,71,72,...
Ich würde das fclose() nicht in der for-Schleife machen, da die Datei ja nach dem ersten Datensatz geschlossen werden würde.
Abgesehen davon würde ich in der Query nur die Daten abfragen, die ich wirklich verwenden will, also kein 'select *'.
Dann frage ich mich, warum es wirklich sein muß, daß Du die Daten aus der Datenbank in einem Array zwischenspeicherst. Das könnte doch auch wesentlich speicherschonend erledigt werden.
Den Rest kann ich nicht beurteilen, da ich mich mit PHP praktisch nicht auskenne;-)
Außerdem habe ich eine Frage wie genau die XML Datei aussehen muss.
Die hat ja so eine Baumstruktur. Wir jede Zeile mit neuen öffnen/schließenden Tags um 4 Stellen eingerückt?
Die Formatierung der XML-Datei ist für den Datenaustausch irrelevant. Es ist jedoch für Menschen besser lesbar, wenn Du eine gewisse Formatierung einhältst.
Grüße
Klaus
Hi Klaus,
Ich würde das fclose() nicht in der for-Schleife machen, da die Datei ja nach dem ersten Datensatz geschlossen werden würde.
Jo, das hatte ich auch schon bemerkt und korrigiert. :-)
Abgesehen davon würde ich in der Query nur die Daten abfragen, die ich wirklich verwenden will, also kein 'select *'.
Ja, die anderen Daten benötige ich später. So brauche ich dann nur eine SQL Anweisung.
Dann frage ich mich, warum es wirklich sein muß, daß Du die Daten aus der Datenbank in einem Array zwischenspeicherst. Das könnte doch auch wesentlich speicherschonend erledigt werden.
Ich möchte mir die Daten erst schön in einem Array bereitstellen, um dann später alles in einem Rutsch in mehrere Dateien zu schreiben.
Die Formatierung der XML-Datei ist für den Datenaustausch irrelevant. Es ist jedoch für Menschen besser lesbar, wenn Du eine gewisse Formatierung einhältst.
Ja, trotz des "\n" am Ende der fwrite Anweisung schreibt der mir alles in eine Zeile in der Text Datei.
Aber Du kennst Dich ja nicht mit php aus. So muss ich nun warten bis jemand kommt, der mir mit dem Formatierungsproblem helfen kann.
Brauche ich denn nun diese Bindestriche ?
Danke