Простой способ обработки XML из ввода данных на сервере Python

Я только что начал проект, который должен использовать простой веб-сервер на pythonic (мне нужна только одна страница "config") для получения данных от пользователя в действительно многократных полях (более 150), а затем преобразовать все эти данные (field + data) в XML-файл и отправить его в другой модуль Python. Так что вопрос - что за простой способ с этим справиться? Я нашел cherryPy (как веб-сервер) и Genshi (как xml-парсер), но для меня даже не очевидно, как объединить это (как я понял, Genshi предоставляет шаблон (даже xml) для публикации, но как получить (преобразовать) данные в XML). У меня красный учебник по cherryPy и Genshi, но он немного отличается от того, что мне действительно нужно, и я не настолько силен в python (и особенно в сети) прямо сейчас, чтобы найти правильное направление. Если бы вы могли показать мне какой-нибудь пример чего-то подобного для понимания концепции, это было бы здорово!

Извините за мой английский!

Заранее спасибо.

1 ответ

Python поставляется с удобным xml.etree и вам не нужны дополнительные зависимости для вывода простого XML. Вот пример.

#!/usr/bin/env python
# -*- coding: utf-8 -*-


import xml.etree.cElementTree as etree

import cherrypy


config = {
  'global' : {
    'server.socket_host' : '127.0.0.1',
    'server.socket_port' : 8080,
    'server.thread_pool' : 8
  }
}


class App:

  @cherrypy.expose
  def index(self):
    return '''<!DOCTYPE html>
      <html>
      <body>
        <form action="/getxml" method="post">
          <input type="text" name="key1" placeholder="Key 1" /><br/>
          <input type="text" name="key2" placeholder="Key 2" /><br/>
          <input type="text" name="key3" placeholder="Key 3" /><br/>
          <select name="key4">
            <option value="1">Value 1</option>
            <option value="2">Value 2</option>
            <option value="3">Value 3</option>
            <option value="4">Value 4</option>
          </select><br/>
          <button type="submit">Get XML</button>
        </form>
      </body>
      </html>
    '''

  @cherrypy.expose
  def getxml(self, **kwargs):
    root = etree.Element('form')
    for k, v in kwargs.items():
      etree.SubElement(root, k).text = v

    cherrypy.response.headers['content-type'] = 'text/xml'
    return etree.tostring(root, encoding = 'utf-8')


if __name__ == '__main__':
  cherrypy.quickstart(App(), '/', config)
Другие вопросы по тегам