Xml парсер

Xml парсер - это программа, которая извлекает из исходного файла xml формата данные и сохраняет или использует для последующих действий.

 

Почему нужны xml парсеры?

xml парсер - пример исходного файла

xml парсер - пример исходного файла

В первую очередь потому что сам по себе формат xml популярный среди компьютерных стандартов. XML файл выглядит так:

 

т.е. по сути есть теги, есть какие-то правила какие теги должны следовать друг за другом.

Причина популярности xml файлов заключается в том, что он хорошо читаем человеком. И то, что его относительно легко обрабатывать в программах.

 

Минусы xml-файлов.

xml парсер - большой файл xml

xml парсер - большой файл xml

Минусом является в первую очередь большое количество места на диске, которое занимают эти данные. Ввиду того, что теги, которые постоянно повторяются , при больших объемах данных, занимаю относительно много мегабайт, которые просто необходимо скачивать из источника, а потом и обрабатывать. Есть ли альтернативы? Есть, конечно, но все равно, парсеры xml и xml сегодня один из самых простых и надежных и технологически популярных форматов.

 

Как пишутся XML парсеры?

Парсеры пишутся на языках программирования. Как говорится пишутся на всех , но не некоторых больше. Следует понимать, что есть языки программирования, в которых есть уже встроенные библиотеки для парсинга xml файлов. Но в любом случае даже если библиотеки нет, можно всегда найти подходящую библиотеку для этого дела и использовать ее для извлечения данных из файла.

Глобально есть 2 разных подхода как парсить xml файлы.

Первый - это загружать xml файл полностью в память ну и дальше делать манипуляции по извлечению данных.

Второй - это потоковый вариант. В этом случае в языке программирования определяется определенные теги на которые нужно реагировать функциям создаваемого xml парсера и уже программист сам решает, что нужно делать в случае обнаружения того или иного тега.

Плюсом первого подхода является скорость. Сразу все загрузил файл, потом быстро пробежался в памяти нашел , что нужно и самое главное программировать легко. но Минус есть и очень важный - это

большой объем памяти требуется для работы. Иногда, я бы даже сказал часто бывает так, что  просто невозможно обработать и распарсить xml файл, т.е. создать xml парсер, чтобы работал по первому способу корректно. Почему так? Ну, например, ограничение для 32 битных приложений под виндой позволяет программе максимально занимать 2 гигабайта памяти - больше нельзя.

Однако программировать по поточному варианту сложно. Сложность при достаточно серьезном извлечении вырастает в разы, что соответственно сказывается и на сроках и на бюджете.

 

Валидность xml файлов и парсеров.

xml парсер - невалидный xml  файл

xml парсер - невалидный xml файл

Все было бы с xml файлами и xml парсерами хорошо, но вот есть проблема. Ввиду того, что  создать xml файл может "любой школьник", а в реальности так и есть (потому что очень много кода пишется школьниками, то появляются невалидные файлы , т.е. некорректные. Что это значит и чем это чревато? Самая большая проблема, это то, что просто невозможно иногда корректно распарсить невалидный файл. Например у него теги не закрываются как следовало бы ожидать по стандарту или например кодировка задана неверно. Другая проблема заключается, что если например делаешь парсер на .net то, можно создать так называемые врапперы, и самое обидное бывает, что вот сделаешь такой враппер, а потом считываешь им файл, который "школьник" создал , а файл невалидный и его прочитать невозможно. Поэтому приходиться изгаляться и прибегать к весьма и весьма непопулярным вариантам парсинга таких файлов. А все из=за того, что многие создают xml файлы без использования стандартных библиотек и с полным отвращениям ко всем стандартам xml файлов. Заказчикам это сложно объяснить. Они ждут результат - xml парсер, который преобразует данные из оригинального файла в другой формат.

 

Как создавать xml парсеры (первый вариант)

xml парсер - язык запросов xpath

xml парсер - язык запросов xpath

Есть такой язык запросов к XML данным как Xpath. Язык этот имеет две редакции, углубляться не будем в особенности каждой версии. Лучше представление про этот язык покажут примеры того как использовать его для извлечения данных. Например.

//div[@class="supcat guru"]/a[contains(@href, 'catalog.xml?hid=')]

что делает этот запрос. Он забирает все а тэги, которые имею хреф, содержаший текст catalog.xml?hid=  и этот а тэг должен быть чайлдом дива у которого класс равен supcat guru.

Да, на первый раз может быть и не достаточно понятно, но, все же разобраться можно если захотите. Отправная точка для меня это  http://ru.wikipedia.org/wiki/XPath и вам советую.