Найти - Пользователи
Полная версия: cElementTree в строку, аттрибуты в нужном порядке
Начало » Python для новичков » cElementTree в строку, аттрибуты в нужном порядке
1
odnochlen
ElementTree.tostring(elem, 'utf-8')
Не сохраняет порядок, даже если передавать OrderedDict

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

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

И еще вот
http://stackoverflow.com/questions/2741480/can-elementtree-be-told-to-preserve-the-order-of-attributes
odnochlen
С чтением еще можно жить.

Тут пробегала тема, человек хотел сохранять 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.
Интересно, а почему только в корневом или пустом элементе?
cutwater
odnochlen
Интересно, а почему только в корневом или пустом элементе?

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

То есть любого открывающего или пустого тэга.
adray
odnochlen
Интересно, а почему только в корневом или пустом элементе?
Не в корневом, а открывающем. В end-tag вроде вообще нельзя атрибуты писать
_
slowpoke
odnochlen
Т.е. в переводе на человеческий это должно было быть так:
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
adray
Д.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB