Всем привет. Хочу поделиться своим опытом в парсинге XML, хочу рассказать об инструменте который мне в этом помогает. XML ещё жив и иногда его приходиться парсить. Особенно если вы работаете со СМЭВ (привет всем ребятам для которых "ФОИВ" не пустой звук :) ). Цели у такого парсинга могут быть самые разные, от банального ответа на вопрос какое пространство имён используется в xml-документе, до необходимости получить структурированное представление для документа вцелом. Инструмент для каждой цели будет свой. Пространство имён можно найти поиском подстроки или регулярным выражением. Что бы сделать из xml-документа структурированное представление (DTO) - придётся писать парсер. Для работы с XML в PHP есть пара встроенных классов. Это XMLReader и SimpleXMLElement. С помощью XMLReader парсинг будет выглядеть примерно так : Внутри метода parse(XMLReader $xml) будут бесконечные: Для небольших документов или когда нам из всего документа надо только пару элементов, это приемлемо, на больших объёмах - начинает в глазах рябить от однообразного кода, плюс совесть грызёт за оверхэд от перебора всех элементов документа. Провести анализ только нужных элементов помогает SimpleXMLElement. Этот класс из XML-документа делает объект, у которого все элементы и атрибуты становятся свойствами, то есть появляется возможность работать только с определёнными элементами, а не со всеми подряд, пример: Удобно, да не совсем. Если имя элемента на кириллице, то обратиться к нему через свойство не получиться, придётся использовать SimpleXMLElement::xpath(). С множественными значениями так же приходиться работать через SimpleXMLElement::xpath(). Кроме того SimpleXMLElement имеет свои особенности и некоторые вещи далеко не очевидны. Есть способ проще. Достаточно XML-документ привести к массиву. В работе с массивами нет ни каких подводных камней. Массив из XML делается в пару строчек кода: Каждый XML-элемент будет представлен массивом, состоящим в свою очередь, из трёх  других массивов. Соответственно: массив с индексом '*value' содержит значение элемента, '*attributes' - атрибуты элемента, '*elements' - вложенные элементы. Если элемент множественный, то есть встречается в документе несколько раз подряд, то все его вхождения будут в массиве с индексом '*multiple'. Но и это ещё не всё. Если от работы с XML-документов как с массивом, у вас в глазах рябит от квадратных скобочек, то XmlNavigator - это ваш вариант, создаётся так же в две строки кода. XmlNavigator делает, то же самое что и Converter, но предоставляет API, и с документом мы работаем как с объёктом. Имя элемента, метод name() Значение элемента, метод value() Список атрибутов, метод attribs() Значение атрибута, метод get() Список вложенных элементов, метод elements() Получить вложенный элемент, метод pull() Перебрать все вхождения множественного элемента, метод next() Класс XmlNavigator реализует интерфейс IXmlNavigator. Из названий методов очевидно их назначение. Не очевидные были рассмотрены выше. В работе приходиться использовать сначала SimpleXMLElement - с его помощью из всего документа получаем необходимый элемент, и уже с этим элементом работаем через XmlNavigator. Желаю вам приятного использования. Конечно у вас могут быть свои альтернативы для работы с XML. Предлагаю поделиться в комментариях. Конечно, не могу сказать, что XmlNavigator поможет с любым XML - не проверял, но с обычными документами, без хитростей в схеме документа, проблем не было. Если вам важен порядок следования элементов, то придётся пользоваться XMLReader. Потому что SimpleXMLElement приводит документ к объекту, а у объекта нет такого понятия как порядок следования элементов. программист эникейщик