Transformacja PHP XML do tablicy


Próbowałem znaleźć sposób na przekonwertowanie dowolnego źródła XML na tablicę asocjacyjną, zauważyłem, że wiele innych osób szukało tego samego i było wiele prób, niektóre z nich się nie powiodły, znalazłem następujący sposób, aby to zrobić, uznanie do
http://gaarf.info/2009/08/13/x ... array
http://gaarf.info/2009/08/13/x ... rray/
/
Zmieniłem trochę kod i oto wynik.
function xmlNameSpaceToArray(SimpleXmlIterator $xml, $nameSpaces=Null){
$output = Null;
$preparedArray = array();
for($xml->rewind(); $xml->valid(); $xml->next()) {
$key = $xml->key();
if(!isset($preparedArray[$key])) { $preparedArray[$key] = array(); $i=0; }
else $i = count($preparedArray[$key]);
$simple = true;
foreach($xml->current()->attributes() as $k=>$v) {
$preparedArray[$key][$i][$k]=(string)$v;
$simple = false;
}
if($nameSpaces) foreach($nameSpaces as $nid=>$name) {
foreach($xml->current()->attributes($name) as $k=>$v) {
$preparedArray[$key][$i][$nid.':'.$k]=(string)$v;
$simple = false;
}
}
if($xml->hasChildren()) {
if($simple) $preparedArray[$key][$i] = xmlNameSpaceToArray($xml->current(), $nameSpaces);
else $preparedArray[$key][$i]['content'] = xmlNameSpaceToArray($xml->current(), $nameSpaces);
} else {
if($simple) $preparedArray[$key][$i] = strval($xml->current());
else $preparedArray[$key][$i]['content'] = strval($xml->current());
}
$i++;
}
$output = $preparedArray;
return $preparedArray;
} function xmlToArray($xmlFilePath){
$xml = new SimpleXmlIterator($xmlFilePath , null, true);
$nameSpaces = $xml->getNamespaces(true);
$output = xmlNameSpaceToArray($xml,$nameSpaces);
return $output;
} $xmlFilePath = 'http://forums.devshed.com/rss/feed-5.xml';
$output = xmlToArray($xmlFilePath);
print_r($output);

Próbuję dowiedzieć się, że potencjalne problemy, które może mieć, celem jest uczynienie tej pracy dla bardziej dobrze skonstruowanego kanału XML, bez żadnych ostrzeżeń PHP, powiadomień i bez utraty żadnych danych.
Czy możesz znaleźć błąd w tym lub niedziałający kanał? Działało we wszystkim, do czego go testowałem.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Najprostszym sposobem wykonania jest użycie wbudowanych funkcji, a następnie przekształcić je do tablicy.
<?php
$obj = simplexml_load_string($xml);// Parse XML
$array = json_decode(json_encode($obj), true);// Convert to array
?>
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Wydaje się, że ten fragment XML to psuje.
<BackupJob ID="2011-11-09-05-00-00" StartTime="2011-11-09 04:56:51" EndTime="2011-11-09 05:02:01" BackupJobStatus="BS_STOP_SUCCESS" NumOfWarnEntries="0" NumOfErrorEntries="0" NumOfNewFiles="0" TotalNewFilesSize="0" NumOfUpdatedFiles="1" TotalUpdatedFilesSize="8709755" NumOfDeletedFiles="0" TotalDeletedFilesSize="0" NumOfMovedFiles="0" TotalMovedFilesSize="0" NumOfUpdatedPermissionFiles="0" TotalUpdatedPermissionFilesSize="0"></BackupJob>
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

http://php.net/wheelvering/łazienka/book.simplexml.php
http://php.net/manual/en/book.simplexml.php
Składnia wygląda tak dla twojego przykładu.
<aaaa Version="1.0">
<bbb>
<cccc>
<dddd Id="id:pass"/>
<eeee name="hearaman" age="24"/>
</cccc>
</bbb>
</aaaa>

Kod PHP
<?php
$xml = new SimpleXMLElement($xmlString);
echo $xml->bbb->cccc->dddd['Id'];
echo $xml->bbb->cccc->eeee['name'];
// or...........
foreach ($xml->bbb->cccc as $element) {
foreach($element as $key => $val) {
echo "{$key}: {$val}";
}
}

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się