Доброго времени суток. Потребовалось распарсить xml файл. В мане нашел прекрасную функцию simplexml_load_file(). Сначала она возвращала пустой объект. Нагуглил что у нее проблема с Namespace, ну и там же было решение. Корень получить удалось. Но меня интересует v8msg:Body и то что у него внутри. А вот при попытке получить детенышей получаю: Код (Text): Notice: Trying to get property of non-object var_dump() говорит что Body - объект. Я пробовал к нему обращаться и как к объекту и как к массиву. Толко предупреждения меняются. Подскажите где косячу. Структура файла: Код (Text): <?xml version="1.0" encoding="UTF-8"?> <v8msg:Message xmlns:v8msg="http://v8.1c.ru/messages"> <v8msg:Header> <v8msg:ExchangePlan>ОбменССайтом</v8msg:ExchangePlan> <v8msg:To>WW</v8msg:To> <v8msg:From>T1</v8msg:From> <v8msg:MessageNo>17</v8msg:MessageNo> <v8msg:ReceivedNo>0</v8msg:ReceivedNo> </v8msg:Header> <v8msg:Body xmlns:v8="http://v8.1c.ru/data" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <TableVoz> <Row> <ID xsi:type="xsd:string">f54099e4-e27e-11df-9fba-6cf0496cdd01</ID> <Month xsi:type="xsd:dateTime">2016-04-01T00:00:00</Month> <Status xsi:type="xsd:decimal">0</Status> <Price xsi:type="xsd:decimal">0</Price> <PriceAgent xsi:type="xsd:decimal">0</PriceAgent> </Row> <Row> <ID xsi:type="xsd:string">f54099e4-e27e-11df-9fba-6cf0496cdd01</ID> <Month xsi:type="xsd:dateTime">2016-04-02T00:00:00</Month> <Status xsi:type="xsd:decimal">0</Status> <Price xsi:type="xsd:decimal">0</Price> <PriceAgent xsi:type="xsd:decimal">0</PriceAgent> </Row> <Row> <ID xsi:type="xsd:string">f54099e4-e27e-11df-9fba-6cf0496cdd01</ID> <Month xsi:type="xsd:dateTime">2016-04-03T00:00:00</Month> <Status xsi:type="xsd:decimal">0</Status> <Price xsi:type="xsd:decimal">0</Price> <PriceAgent xsi:type="xsd:decimal">0</PriceAgent> </Row> </TableVoz> </v8msg:Body> </v8msg:Message> Код получения XML: PHP: $xml = simplexml_load_file('import.xml'); $ploschadki = $xml->getNamespaces(); $hz = $xml->children($ploschadki['v8msg']); $hz2 = $hz->Body; $hz21 = $hz2->getNamespaces(); $hz3 = $hz2->children($hz21->TableVoz); var_dump($hz3);
А почему бы xpath не использовать? PHP: <?php $xml = simplexml_load_file('import.xml'); $rows = $xml->xpath('//v8msg:Body/TableVoz'); var_dump($rows);
Вы гений! Спасибо большое! Я просто впервые столкнулся с парсингом xml и на xpath не натыкался!)) Все корректно работает!)