Below is the text of the page https://livedev.org/articles/2007/5 stored 2008-06-09 by archive.org.ua. The original page over time could change. View as original html

Archives for May 2007 : Веб-разработка «по-русски» | livedev.org

livedev.org [http://livedev.org] Веб-разработка «по-русски» XML-сервисы на Python. Часть первая. Создание и парсинг XML. 2 Posted by dobrych Wed, 02 May 2007 08:12:00 GMT Недавно второй раз на практике столкнулся с серьезной задачей по работе с XML на Python. И второй раз был расстроен. К сожалению не все просто в Python настолько, насколько хотелось бы. Говоря в общем, встроенная в последний Python (2.5) ElementTree не совсем хороший выбор, как по мне, для полноценной работы с XML . С помощью ElementTree удобно создавать XML -документы, но никак не парсить. Я был удивлен, что такая простая задача как принять XML -документ из переменной—окажется такой замороченной… ElementTree заточен для парсинга файлов (т.е. ему нужно передавать при открытии или путь или уже открытый файл). В моем случае я уже имел переменную из HTTP -запроса, обработанного Django. Несколько часов я плясал с бубном, сначала чтобы заставить принять XML -документ из переменной, потом уже с самим парсингом и получением аттрибутов тегов. В общем убил много времени впустую, что очень неприятно. В довесок ко всему общеизвестный факт что ElementTree имеет очень ограниченную документацию, поэтому время было потрачено дополнительно на гугление и ковыряние в его сырцах. Хочу отметить что создание XML -документа с помощью ElementTree оказалось достаточно простым и удобным. А начинали мы именно с создания, поэтому и парсинг позже пытались делать тем же ElementTree . В итоге, после всей возни, я решил для парсинга использовать отдельную библиотеку— Beautilful Soup . И работа сразу пошла очень быстро. Главное достоинство Beautilful Soup —это практически полная сериализация XML -документа в объекты Python. Что очень хорошо отражается на читаемости кода и очень удобно при отладке. Насчет создания документов с помощью Beautilful Soup , ничего сказать не могу, т.к. небыло времени для себя потестировать. Из прошлого своего опыта также добавлю, что есть еще одна библиотека для работы с XML на Python— lxml . Она базируется на Cи библиотеках libxml и libxslt. Которые в свою очередь используются в большом количестве unix-приложений и других скриптовых языках. Прошлая моя задача была свзязана с выборкой данных из XML -документов с помощью Xpath. Так вот lxml и в частности libxml имеет хорошую и удобную реализацию Xpath. Так что рекомендую. PS: Все написанное выше—сугубо личное мнение, на которое в принципе имею право :) Ниже примеры кода. # пример парсинга XML через Soup from BeautifulSoup import BeautifulStoneSoup as Soup def some_view(request): message = Soup(request.raw_post_data) some_obj = Obj(content = message.body.string, phone = message.sin.string) # message.body - body это xml тег # пример создания XML-документа import elementtree.ElementTree as ET # создаем документ root = ET.Element("message") # рутовый элемент root.set("rid", "7idfndsi9s") # устанавливаем ему аттрибут sn = ET.SubElement(root, "sn") sn.text = "1039303" body = ET.SubElement(root, "body") body.set("content-type","text/plain") body.text = "somte text content" message = ET.tostring(root) Вот такой код генериться (из предыдущего примера) 1039303 somte text content Posted in статьи Tags elementtree , python , service , soup , xml Meta no trackbacks , 2 comments , permalink , rss , atom Searching... О блоге Мысли, идеи, задачи и решения по веб-разработке. Взгляд с персональной позиции автора. Об авторе Зовут меня Илья. В рабочее время занимаюсь веб-разработкой. Интересуюсь новыми и модными веб-технологиями. Нерабочее время посвещаю семье, по возможности фотографии и музыке . Подробнее. Tags 2008 ajax conference css development django downshifting exception javascript kiev life python rails ruby syntax typo uaweb update web xml Блогролл Amazon byteflow Маниакальный Веблог Подробно Appleworms Андрей Ясинецкий Собираю блогролл Свежие комментарии by krovati-gostinichnye on Мультисайтовость в django trunk by mybryco on Линкотека №2 by krovati-gostinichnye on Мультисайтовость в django trunk by farinaska on Не изобретая велосипед by semicon on Линкотека №2 Archives May 2008 (2) April 2008 (2) March 2008 (5) February 2008 (2) January 2008 (4) December 2007 (2) November 2007 (2) October 2007 (3) September 2007 (2) August 2007 (4) June 2007 (1) May 2007 (1) April 2007 (3) February 2007 (1) January 2007 (3) December 2006 (4) November 2006 (4) October 2006 (4) September 2006 (3) del.icio.us/dobrych/webdev Design Stencils - Yahoo! Design Pattern Library Набор wireframe для созданию web ui прототипов от Yahoo Natural Docs Софт для генерации документации из кода. Юзабельная дока получается js-ria-tools - Google Code Набор утилит для оптимизации и тестирования JavaScript, возможность минимизации файлов JS mapfish Готовое приложение (клиент и сервер) для работы с гео-данным. Построено на базе Pylons и ExtJS/Openlayers Resizable Polygons Пример создания полигонов с возможностью ресайзинга на Google maps (javascript) Python Package Index : virtualenv 1.0 Скрипт для создания варитуального окружения (модули итп) для Python-приложений Google Maps JavaScript API Example - Snap to Polyline Пример кода для привязки курсора к полигонам и полилиниям Take Control of Your Maps (A List Apart Article) Отличный обзор картографического (GIS) софта для построения веб-приложений Mapstraction - a javascript library to hide differences between mapping APIs. Библиотека JS для работы с многими картографическими сервисами через единый API Modest Maps Библиотека для ActionScript (2/3) и Python для работы с картографическими сервисами Плюшки © livedev.org / powered by typo / styled with clerkly