array zu xml

Compane

Mitglied
Hallo Miteinander :-)

Ich habe folgendes Problem (und mir hat mal jemand gesagt das es für jedes Problem auch eine Lösung gibt aber selber findet man sie fast nie)

Ich habe eine txt datei mit folgendem Aufbau:

20080703192710_backup
Text1 (1).bak
Text1 (10).txt
Text1 (11).txt
Text1 (12).alf
Text1 (3).dmp
Text1 (4).sav
Text1 (5).txt
Text1 (6).txt
Text1 (7).txt
Text1 (8).txt
Text1 (9).txt
text2.cdc
20080703192732_backup
Text1 (1).bak
Text1 (10).txt
Text1 (11).txt
Text1 (12).alf
Text1 (3).dmp
Text1 (4).sav
Text1 (5).txt
Text1 (6).txt
Text1 (7).txt
Text1 (8).txt
Text1 (9).txt
text2.cdc

nun habe ich mit file("c:/test.txt") jede zeile ausgelesen in ein array

Nun kommt das Problem:

Ich habe mir von einen bekannten ein code schicken lassen den ich nicht so ganz verstehe:

function arrayToXML($arr,$level=0) {
$xmlstr='';
$ident=str_repeat('',$level*2);
foreach($arr as $key=>$value) {
if (is_numeric($key)) $key="Item $key";
$xmlstr.=$ident."<$key>";
if (is_array($value)) {
$xmlstr.="\r\n".arrayToXML($value,$level+1)."$ident";
} elseif (is_bool($value)) {
$xmlstr.=$value?'true':'false';
} else {
$xmlstr.="$value";
}
$xmlstr.="</$key>\r\n";
}
return $xmlstr;
}
echo "<pre>";
echo htmlentities(arrayToXML($arr));
echo "</pre>";

Der code zeigt folgendes an:

<Item 0>20080703192710_backup</Item 0>
<Item 1> Text1 (1).bak</Item 1>
<Item 2> Text1 (10).txt</Item 2>
<Item 3> Text1 (11).txt</Item 3>
<Item 4> Text1 (12).alf</Item 4>
<Item 5> Text1 (3).dmp</Item 5>
<Item 6> Text1 (4).sav</Item 6>
<Item 7> Text1 (5).txt</Item 7>
<Item 8> Text1 (6).txt</Item 8>
<Item 9> Text1 (7).txt</Item 9>
<Item 10> Text1 (8).txt</Item 10>
<Item 11> Text1 (9).txt</Item 11>
<Item 12> text2.cdc</Item 12>
<Item 13>20080703192732_backup</Item 13>
<Item 14> Text1 (1).bak</Item 14>
<Item 15> Text1 (10).txt</Item 15>
<Item 16> Text1 (11).txt</Item 16>
<Item 17> Text1 (12).alf</Item 17>
<Item 18> Text1 (3).dmp</Item 18>
<Item 19> Text1 (4).sav</Item 19>
<Item 20> Text1 (5).txt</Item 20>
<Item 21> Text1 (6).txt</Item 21>
<Item 22> Text1 (7).txt</Item 22>
<Item 23> Text1 (8).txt</Item 23>
<Item 24> Text1 (9).txt</Item 24>
<Item 25> text2.cdc</Item 25>

Aber es müsste so angezeigt werden:

<20080703192710_backup>
<Item 1> Text1 (1).bak</Item 1>
<Item 2> Text1 (10).txt</Item 2>
<Item 3> Text1 (11).txt</Item 3>
<Item 4> Text1 (12).alf</Item 4>
<Item 5> Text1 (3).dmp</Item 5>
<Item 6> Text1 (4).sav</Item 6>
<Item 7> Text1 (5).txt</Item 7>
<Item 8> Text1 (6).txt</Item 8>
<Item 9> Text1 (7).txt</Item 9>
<Item 10> Text1 (8).txt</Item 10>
<Item 11> Text1 (9).txt</Item 11>
<Item 12> text2.cdc</Item 12>
</20080703192710_backup>
<20080703192732_backup>
<Item 14> Text1 (1).bak</Item 14>
<Item 15> Text1 (10).txt</Item 15>
<Item 16> Text1 (11).txt</Item 16>
<Item 17> Text1 (12).alf</Item 17>
<Item 18> Text1 (3).dmp</Item 18>
<Item 19> Text1 (4).sav</Item 19>
<Item 20> Text1 (5).txt</Item 20>
<Item 21> Text1 (6).txt</Item 21>
<Item 22> Text1 (7).txt</Item 22>
<Item 23> Text1 (8).txt</Item 23>
<Item 24> Text1 (9).txt</Item 24>
<Item 25> text2.cdc</Item 25>
</20080703192732_backup>

Kann mir jemand von euch helfen?

Grüße

Compane
 
Wenn Du nach der Zeile
PHP:
foreach($arr as $key=>$value) {
folgendes einfügst
PHP:
if(substr($value,-7)=='_backup') $key=$value;
, sollte es zu der gewünschten Ausgabe kommen.
Allerdings sollten XML-Tags nicht mit Zahlen beginnen.
 
Zuletzt bearbeitet:
grüße danke für deine antwort aber es hat sich nichts an der ausgabe geändert!

es müsste laut deinen anweisungen also so aussehen:

<?

$arr = file("c:/test.txt");

function arrayToXML($arr,$level=0) {
$xmlstr='';
$ident=str_repeat('',$level*2);
foreach($arr as $key=>$value) {
if(substr($value,-7)=='_backup') $key=$value;
if (is_numeric($key)) $key="Item $key";
$xmlstr.=$ident."<$key>";
if (is_array($value)) {
$xmlstr.="\r\n".arrayToXML($value,$level+1)."$ident";
} elseif (is_bool($value)) {
$xmlstr.=$value?'true':'false';
} else {
$xmlstr.="$value";
}
$xmlstr.="</$key>\r\n";
}
return $xmlstr;
}
echo "<pre>";
echo htmlentities(arrayToXML($arr));
echo "</pre>";
?>
 
Hab wohl gestern abend nicht so genau gelesen.
Ich schreib dann gleich mal ne vereinfachte Routine, die zu Deinem Problem besser passt:

PHP:
<?php
$arr = file("test.txt");
$closetag='';
$xmlstr='';
$prefix='b_';
foreach($arr as $key=>$value) {
  $value=trim($value);
  if(substr($value,-7)=='_backup'){
    $xmlstr.=$closetag."<$prefix$value>\r\n";
    $closetag="</$prefix$value>\r\n";
  }else{
    $key="Item $key";
    $xmlstr.="  <$key>".$value."</$key>\r\n";
    }
}
echo "<pre>";
echo htmlentities($xmlstr.$closetag);
echo "</pre>";
?>

Mit $prefix hab ich mal noch ein "b_" davor gesetzt, um die Tags nicht mit Zahlen beginnen zu lassen.
 
Zurück