Доброго времени суток. Есть рабочий в общем то парсер на основе simple_xml но в нём есть косяк. При определённых условиях, а именно Код (Text): ...<row messageID="313909926">this is text<font size="12... он пропускает значение messageID и выводит [row][0] = "this is text...", если не убирать (как сейчас в скрипте) CDATA тогда у нас будет [row][messageID]="313909926". Собственно вопрос, как сделать что б показывало сразу и текст и messageID в одном массиве т.е. Код (Text): [row][0]=... [row][messageID]=... Код (Text): function xmlGetDataByUrlRaw ($_url) { $xmlAsStr = file_get_contents ($_url); $xmlAsStr = preg_replace_callback ('/<!\[CDATA\[(.*)\]\]>/', create_function ( '$_matches', 'return trim (htmlspecialchars ($_matches[1]));'), $xmlAsStr); $xmlAsObj = simplexml_load_string ($xmlAsStr); $xmlAsArr = $this->xmlGetAsArray ($xmlAsObj); return $xmlAsArr; } Код (Text): function xmlGetAsArray ($_xmlData) { $return = FALSE; if (is_object ($_xmlData)) // если обьект переделываем в массив $_xmlData = get_object_vars ($_xmlData); if (is_array ($_xmlData)) foreach ($_xmlData as $index => $value) { if (is_object ($value)) // если обьект { $return[$index] = $this->xmlGetAsArray ($value); continue; } if (is_array ($value)) // если массив { if ($index == "@attributes") foreach ($value as $attrIndex => $attrValue) { $return[$attrIndex] = $attrValue; } else $return[$index] = $this->xmlGetAsArray ($value); } else // если обычная запись $return[$index] = $value; } return $return; }