Добавьте атрибут в начале в дочерний тег в XML с помощью Python 3 - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь добавить атрибуты внутри тега, но это должно быть в начале. Мой вход говорит:

<data>
        <Test Name="A" Class="1"/>
        <Test Name="B" Class="2"/>
        <Test Name="C" Class="3"/>      
</data>

Мне нужен вывод как:

<data>
        <Test ID="Hello" Name="A" Class="1"/>
        <Test ID="Hello" Name="B" Class="2"/>
        <Test ID="Hello" Name="C" Class="3"/>       
</data>

Но я получаю это:

<data>
        <Test Name="A" Class="1" ID="Hello"/>
        <Test Name="B" Class="2" ID="Hello"/>
        <Test Name="C" Class="3" ID="Hello"/>       
</data>

Я использовал from lxml import etree as ET в своем коде, но он добавляет атрибут в конец выходного файла. Мне нужно в начале. import xml.etree.ElementTree as ET дает вывод, но в алфавитном порядке. Поэтому я попробовал lxml модуль.

Мой код:

#import xml.etree.ElementTree as ET    
from lxml import etree as ET

tree = ET.parse('sample.xml')
root = tree.getroot()    
for test in root.iter('Test'):
    test.set('Class', 'Hello')

tree.write('output.xml')

Спасибо!

1 Ответ

0 голосов
/ 14 мая 2018

Атрибуты в элементе представляют собой неупорядоченный набор пар (имя, значение). Невозможно вставить элемент в определенную позицию в неупорядоченном наборе.

Если вы генерируете данные для приложения-потребителя, которому требуются атрибуты в определенном порядке, то приложение-потребитель сломано и должно быть исправлено. Если вы не можете это исправить, вы можете найти инструменты, которые позволят вам изменить порядок атрибутов во время сериализации: например, Saxon- (PE / EE) имеет свойство сериализации saxon:attribute-order.

...