首页 > 解决方案 > 使用python 3在xml中的子标签开头添加属性

问题描述

我正在尝试在标签内添加属性,但它应该在开头。我的意见是:

<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')

谢谢!

标签: xmlpython-3.xlxml

解决方案


元素中的属性是一组无序的(名称,值)对。无法在无序集中的特定位置插入项目。

如果您正在为需要按特定顺序使用属性的消费应用程序生成数据,那么消费应用程序就会损坏并且应该修复。如果您无法修复它,您也许可以找到允许您在序列化期间重新排序属性的工具:例如 Saxon-(PE/EE) 有一个序列化属性saxon:attribute-order


推荐阅读