Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 12, 2012 20:44:56

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

cElementTree в строку, аттрибуты в нужном порядке

ElementTree.tostring(elem, 'utf-8')
Не сохраняет порядок, даже если передавать OrderedDict

root.append(Element('method', OrderedDict([
        ('attr1', 'value1'), 
        ('attr2', 'value2'), 
    ])))

Отредактировано odnochlen (Ноя. 12, 2012 20:45:15)

Офлайн

#2 Ноя. 12, 2012 20:51:37

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

cElementTree в строку, аттрибуты в нужном порядке

Я не знаю на счет cElementTree, но по спецификации xml порядок аттрибутов может быть любым, поэтому некоторые библиотеки складывают аттрибуты в одному им известном порядке.
Собственно я с этим столкнулся когда утилита, котрой я кормил xml читала аттрибуты не по именам а по индексу и использовала libxml2 а я генерировал xml при помощи xerces который об порядке аттрибутов ничего не знал.

И еще вот
http://stackoverflow.com/questions/2741480/can-elementtree-be-told-to-preserve-the-order-of-attributes



Отредактировано cutwater (Ноя. 12, 2012 20:52:14)

Офлайн

#3 Ноя. 12, 2012 20:56:25

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

cElementTree в строку, аттрибуты в нужном порядке

С чтением еще можно жить.

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

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

From section 3.1 of the XML recommendation:

Note that the order of attribute specifications in a start-tag or empty-element tag is not significant.
Интересно, а почему только в корневом или пустом элементе?

Отредактировано odnochlen (Ноя. 12, 2012 21:12:20)

Офлайн

#4 Ноя. 12, 2012 21:28:11

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

cElementTree в строку, аттрибуты в нужном порядке

odnochlen
Интересно, а почему только в корневом или пустом элементе?

Эм… ты не понял.
The beginning of every non-empty XML element is marked by a start-tag.

То есть любого открывающего или пустого тэга.



Отредактировано cutwater (Ноя. 12, 2012 21:28:46)

Офлайн

#5 Ноя. 12, 2012 21:30:07

adray
Зарегистрирован: 2012-09-15
Сообщения: 123
Репутация: +  18  -
Профиль   Отправить e-mail  

cElementTree в строку, аттрибуты в нужном порядке

odnochlen
Интересно, а почему только в корневом или пустом элементе?
Не в корневом, а открывающем. В end-tag вроде вообще нельзя атрибуты писать
_
slowpoke

Отредактировано adray (Ноя. 12, 2012 21:32:24)

Офлайн

#6 Ноя. 12, 2012 22:45:28

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

cElementTree в строку, аттрибуты в нужном порядке

Т.е. в переводе на человеческий это должно было быть так:

Note that the order of attribute specifications is not significant.
т.к. в других тегах атрибутов быть не может?

Напомнило
>>> file("\0")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: file() argument 1 must be encoded string without NULL bytes, not str
вместо
TypeError: file() argument 1 may not contain NULL bytes

Отредактировано odnochlen (Ноя. 13, 2012 03:21:59)

Офлайн

#7 Ноя. 12, 2012 23:56:39

adray
Зарегистрирован: 2012-09-15
Сообщения: 123
Репутация: +  18  -
Профиль   Отправить e-mail  

cElementTree в строку, аттрибуты в нужном порядке

Д.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version