быстрый и простой способ шаблонирования XML-файлов в Python - PullRequest
4 голосов
/ 28 июня 2009

Прямо сейчас я жестко запрограммировал весь xml-файл в своем скрипте на python и просто выполнил out.write (), но теперь им становится сложнее управлять, потому что у меня есть несколько типов xml-файлов.

Какой самый простой и быстрый способ настройки шаблонов, чтобы я мог просто дать имена переменных amd filename?

Ответы [ 5 ]

4 голосов
/ 28 июня 2009

Облегченная опция: xml.dom.minidom

xml.dom.minidom - это упрощенная реализация интерфейса объектной модели документа. Он должен быть проще, чем полная DOM, а также значительно меньше.

Вы можете создать объект DOM, используя xml.dom API, например, Объекты DOM Element , и сгенерировать XML, используя Node.writexml. Обратите внимание, что для этого необходимо построить иерархии DOM, что может отличаться от того, что вам нужно.

более питонический вариант - ElementTree .

Тип Element - это гибкий контейнерный объект, предназначенный для хранения иерархических структур данных в памяти. Тип может быть описан как нечто среднее между списком и словарем.

Объекты ElementTree проще создавать и обрабатывать в Python, и их можно сериализовать в XML с помощью ElementTree.dump () или ElementTree.tostring ()

3 голосов
/ 28 июня 2009

Краткий ответ: Вы должны сосредоточиться и иметь дело с данными (т.е. объектом python), а не с необработанным XML

Основная история: Предполагается, что XML представляет собой представление некоторых данных или набора данных. В вашем вопросе недостаточно подробностей о типе данных, что они представляют и т. Д. И т. Д., Поэтому я дам вам несколько основных ответов.

Python: BeautifulSoup, lxml и другие библиотеки Python (ElementTree и т. Д.) Упрощают работу с XML. Они позволили мне читать или записывать данные XML гораздо проще, чем если бы я пытался работать непосредственно с XML в необработанном виде.

В середине этих двух действий (ввод, вывод) моя программа на python имеет дело с хорошим объектом python или каким-то деревом разбора, которое я могу пройти. Вы можете читать данные, создавать объект из этой строки, манипулировать им и записывать XML.

Другой выбор, Шаблоны: Хорошо - может быть, вам нравится XML, и вы просто хотите «шаблонировать» его, чтобы вы могли заполнить его данными.

Возможно, вам будет удобнее, если вы на самом деле не манипулируете данными, а просто представляете их для вывода. И это похоже на строки XML, которые вы используете в настоящее время, поэтому может быть более знакомым.

Используйте Cheetah, Jinja или другие библиотеки шаблонов, чтобы помочь. Создайте шаблон для файла XML, используя этот язык шаблонов.

Например, вы просто читаете список книг из файла или таблицы базы данных. Вы передадите этот список объектов книги в шаблонизатор с шаблоном, а затем попросите его записать вывод XML.

Пример шаблона для этих объектов книги:

<?xml version="1.0"?>
<catalog>
   {% for object in object_list %}
   <book id="{{ object.bookID }}">
      <author>{{ object.author_name }}</author>
      <title>{{ object.title }}</title>
      <genre>{{ object.genre }}</genre>
      <price>{{ object.price }}</price>
      <publish_date>{{ object.pub_date }}</publish_date>
      <description>{{ object.description }}</description>
   </book>
   {% endfor %}
 </catalog>
 </xml>

Механизм шаблонов будет циклически перебирать «object_list» и выводить длинный XML-файл со всеми вашими книгами. Это было бы намного лучше, чем хранение необработанных строк XML, как вы в настоящее время.

Это позволяет обновлять и модифицировать отображение XML отдельно от данных, хранения данных и манипулирования данными, делая вашу жизнь проще.

3 голосов
/ 28 июня 2009

Два варианта.

  1. Шаблон инструмента, например Jinja2 .

  2. Создание объекта DOM. Не так плохо, как кажется. ElementTree имеет приятную фабрику для создания XML-тегов и создания необходимой структуры.

1 голос
/ 28 июня 2009

Мой древний YAPTU и вариант Palmer yaptoo на нем должны быть полезны, если вы хотите что-то очень простое и легкое - но есть много, много других общих и мощных шаблонизаторов для выбрал среди этих дней. Довольно полный список здесь .

0 голосов
/ 28 июня 2009

Вы просили самое простое и быстрое, поэтому смотрите этот пост: http://blog.simonwillison.net/post/58096201893/simpletemplates

Если вы хотите что-то умнее, посмотрите здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...