Форум сайта python.su
0
Есть такой xml файл, мне нужно сформировать таблицу
<TreeRoot> <Switch1> <id>1</id> <ip>10.0.0.1</ip> <hostname>zyxel</hostname> <description>misowskaja</description> <templateswitch>zyxel</templateswitch> <icmp>fail</icmp> </Switch1> <Switch2> <id>2</id> <ip>10.0.0.2</ip> <hostname>zyxel</hostname> <description>misowskaja2</description> <templateswitch>zyxel</templateswitch> <icmp>fail</icmp> </Switch2> </TreeRoot>
XML_FILE = 'xmlfile.xml' tree = ET.parse(XML_FILE) root = tree.getroot() tag = [] text = [] start = 0 end = 7 for elem in root.getiterator(): if elem.tag == "TreeRoot": continue tag.append(elem.tag) text.append(elem.text) print '<table border="2px" width="100%">' for x in tag: if x.startswith('Sw'): print '<tr>' print '<td rowspan="2">', x, '</td>' elif x.endswith('icmp'): print '<th>', x, '</th></tr>' print '<tr>' for y in text[start:end]: if y == '\n ': start += 1 end += 1 continue print '<td>', y, '</td>' start += 1 end += 1 print '</tr>' else: print '<th>', x, '</th>' print '</table>'


Отредактировано fehu (Ноя. 15, 2015 17:57:09)
Офлайн
39
Офлайн
0
4kpt_IIIБордер с шириной для наглядности вставил, понимаю что можно css использовать, вопрос то в другом, как логику реализовать более правильно.
css…
Офлайн
39
Это будет вебсервис или локальное приложение? Если вебсервис - возьмите какой-нибудь легковесный фреймверк типа ботла и вперед. А там уже можно и логику организовать. В шаблон сразу передавать ссылку на функцию отображения (вьюху), которая уже и будет работать с snmp. Если же нет - смотрите в сторону графических библиотек Tkiner или PyQt (PySide).
Офлайн
0
4kpt_IIIС фреймворками боюсь не успею разобраться, до диплома чуть чуть осталось. Будет веб приложение в нем функционал, отображение состояние коммутаторов (что сейчас пытаюсь сделать), добавление, удаление, бд в xml лежит отправляется через форму get запросом(значения принимаю через cgi), часть уже реализовал.
Это будет вебсервис или локальное приложение? Если вебсервис - возьмите какой-нибудь легковесный фреймверк типа ботла и вперед. А там уже можно и логику организовать. В шаблон сразу передавать ссылку на функцию отображения (вьюху), которая уже и будет работать с snmp. Если же нет - смотрите в сторону графических библиотек Tkiner или PyQt (PySide).
Офлайн
39
Для сборки html существуют специальны шаблонизаторы.
Можете глянуть в сторону jinja2
P.S. Ботл? Осваивать? Да вопрос 1-2х дней.
Офлайн
0
4kpt_IIIЛадно допустим разберусь с ботл, но вопрос остается открытым как мне данные из xml распихать в ячейки такой таблицы, которые я привел во второй картинке, все что у меня получается, все криво либо как выходит как на первой.
Для сборки html существуют специальны шаблонизаторы.Можете глянуть в сторону jinja2P.S. Ботл? Осваивать? Да вопрос 1-2х дней.
Офлайн
39
Я не пойму. Путаете следы как профессиональный заяц-рысак. Вы xml не можете распарсить?
Офлайн
0
4kpt_IIIДа, именно xml. В заголовке про это и писал. Но за подсказку про ботл спасибо
не м
<table> <tr> <th>name</th> <th>id</th> <th>ip</th> <th>hostname</th> <th>description</th> <th>templateswitch</th> <th>icmp</th> </tr> <tr> <td>sw1</td> <td>1</td> <td>10.0.0.1</td> <td>zyxel</td> <td>lenina1</td> <td>zyxel</td> <td>ok</td> </tr> <tr> <td>sw2</td> <td>2</td> <td>10.0.0.1</td> <td>zyxel</td> <td>lenin2</td> <td>zyxel</td> <td>fail</td> </tr> </table>
Отредактировано fehu (Ноя. 15, 2015 18:47:17)
Офлайн
39
id в таблице работает как ссылка, которая должна ссылаться на функцию-отображение, которая должна выполнять необходимые операции (сейчас там просто заглушка).
xml_template = """ <TreeRoot> <Switch1> <id>1</id> <ip>10.0.0.1</ip> <hostname>zyxel</hostname> <description>misowskaja</description> <templateswitch>zyxel</templateswitch> <icmp>fail</icmp> </Switch1> <Switch2> <id>2</id> <ip>10.0.0.2</ip> <hostname>zyxel</hostname> <description>misowskaja2</description> <templateswitch>zyxel</templateswitch> <icmp>fail</icmp> </Switch2> </TreeRoot> """ # html_template = """ <table> <tr> <th>name</th> <th>id</th> <th>ip</th> <th>hostname</th> <th>description</th> <th>templateswitch</th> <th>icmp</th> </tr> {% for swt in switch %} <tr> <td>{{ swt }}</td> <td><a href="#">{{ switch[swt]["id"] }}</a></td> <td>{{ switch[swt]["ip"] }}</td> <td>{{ switch[swt]["hostname"] }}</td> <td>{{ switch[swt]["description"] }}</td> <td>{{ switch[swt]["templateswitch"] }}</td> <td>{{ "problem" if switch[swt]["icmp"] == "failure" else "ok" }}</td> </tr> {% endfor %} </table> """ # # from collections import OrderedDict import xml.etree.ElementTree as ET import jinja2 # root = ET.fromstring(xml_template) result = OrderedDict() # for child in root: params = OrderedDict() for param in child: params[param.tag] = param.text result[child.tag] = params # print(jinja2.Template(html_template).render(switch=result))
Офлайн