<bus>
<directions>
<direct>
<table>
<tr>
<td>Остановочные пункты</td>
<td>Время отправления</td>
</tr>
<tr>
<td>пвсчпсв</td>
<td>пвсчпсв</td>
<td>пвсчпсв</td>
<td>пвсчпсв</td>
<td>пвсчпсв</td>
<td>пвсчпсв</td>
<td>пвсчпсв</td>
<td>пвсчпсв</td>
<td>пвсчпсв</td>
<td>пвсчпсв</td>
</tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr> и т. д.
</table>
<table></table> и т. д.
</direct>
<return>
Такого же формата как и direct
</return>
</directions>
</bus>
$xmlReader = new \XMLReader();
$xmlReader->open($xml);
$buses = array();
while ($xmlReader->read()) {
switch ($xmlReader->nodeType) {
case ($xmlReader::ELEMENT):
// если находим в xml элемент <bus> начинаем обрабатывать его
if ($xmlReader->localName == 'bus') {
// мы будем формировать массив который будет содержать все дочерние элементы элемента <bus>
while ($xmlReader->read()){
if ($xmlReader->nodeType == $xmlReader::ELEMENT) {
$name = $xmlReader->localName;
$xmlReader->read();
$bus[$name] = $xmlReader->value;
}
if ($xmlReader->nodeType == $xmlReader::END_ELEMENT && $xmlReader->localName == 'bus')
break;
}
$buses[]=$bus;
}
}
}
return $buses;
public function xmlReader2assoc($xml, $name) {
$tree = null;
while ($xml->read()) {
if ($xml->nodeType == XMLReader::END_ELEMENT) {
return $tree;
} else if ($xml->nodeType == XMLReader::ELEMENT) {
if ((!$xml->isEmptyElement)) {
$childs = $this->xmlReader2assoc($xml, $xml->localName);
if (count($childs) > 1) {
if (isset($tree[$xml->localName])) {
if (!isset($tree[$xml->localName][0])) {
$moved = $tree[$xml->localName];
unset($tree[$xml->localName]);
$tree[$xml->localName][0] = $moved;
}
$tree[$xml->localName][] = $childs;
} else {
$tree[$xml->localName] = $childs;
}
} else {
$tree[$xml->localName] = $childs;
}
}
} else if ($xml->nodeType == XMLReader::TEXT) {
$tree = $xml->value;
}
}
return $tree;
}