Python-添加具有属性的新子元素

问题描述 投票:0回答:1

我需要有关python脚本的帮助。我创建了一个脚本,可以在其中向XML文件添加新的银行假期。它工作正常(可能是因为我还在学习中,我可能没有以最好的方式做...),但是我必须对XML有了新的根目录,现在我被卡住了,因为不起作用。

这是初始XML

<Holidays>
    <ISR_01>
        <DATE_ISR_01 D="03030303">Off</DATE_ISR_01>
        <DATE_ISR_01 D="05050505">Off</DATE_ISR_01>
    </ISR_01>
    <ISR_02>
        <DATE_ISR_02 D="04040404">Off</DATE_ISR_02>
        <DATE_ISR_02 D="01010101">Off</DATE_ISR_02>
    </ISR_02>
    <ISR_03>
        <DATE_ISR_03 D="01010101">Off</DATE_ISR_03>
    </ISR_03>
</Holidays>

这是我的代码,正在运行:

import xml.etree.cElementTree as ET
from lxml import etree

doc = etree.parse('Bank_Holidays.xml')
root = doc.getroot()
ISR_TEAM = 'ISR_01'
DATE_ISR_TEAM = ('DATE_' + ISR_TEAM)
XPath_Date = ('count(//' + DATE_ISR_TEAM + ')')
count = doc.xpath(XPath_Date)
result = len(root.getchildren())
filtro = "*"
for child in root.iter(filtro):
    pass
NEW_BANK_HOLIDAY = '32122020'       ####### NEW BANK HOLIDAY TO BE ADDED
tree = ET.parse('Bank_Holidays.xml')
root = tree.getroot()

tree = ET.parse('Bank_Holidays.xml')
root = tree.getroot()
element = child.tag
attrib = {}
attrib = {'D': NEW_BANK_HOLIDAY}
subelement = root[0][int(count - 1)].makeelement(DATE_ISR_TEAM, attrib)
ET.SubElement(root[0], DATE_ISR_TEAM, attrib)
root[0][int(count)].text = 'Off'
tree.write('Bank_Holidays.xml')

但是现在,我需要将XML文件更改为这种格式,而且我不知道如何继续进行这项工作。想法是相同的:在此xml中添加新的银行假期行(<DATE_ISR_01 D="05050505">Off</DATE_ISR_01>):

<UCCX>
    <Holidays>
        <ISR_01>
            <DATE_ISR_01 D="03030303">Off</DATE_ISR_01>
            <DATE_ISR_01 D="05050505">Off</DATE_ISR_01>
        </ISR_01>
        <ISR_02>
            <DATE_ISR_02 D="04040404">Off</DATE_ISR_02>
            <DATE_ISR_02 D="01010101">Off</DATE_ISR_02>
        </ISR_02>
        <ISR_03>
            <DATE_ISR_03 D="01010101">Off</DATE_ISR_03>
        </ISR_03>
    </Holidays>
</UCCX>

如何使用新的XML达到相同的结果?

谢谢!

python xml elementtree
1个回答
0
投票

此方法不一定对您有用,仅供参考。

from simplified_scrapy import SimplifiedDoc,req,utils

html = '''
<Holidays>
    <ISR_01>
        <DATE_ISR_01 D="03030303">Off</DATE_ISR_01>
        <DATE_ISR_01 D="05050505">Off</DATE_ISR_01>
    </ISR_01>
    <ISR_02>
        <DATE_ISR_02 D="04040404">Off</DATE_ISR_02>
        <DATE_ISR_02 D="01010101">Off</DATE_ISR_02>
    </ISR_02>
    <ISR_03>
        <DATE_ISR_03 D="01010101">Off</DATE_ISR_03>
    </ISR_03>
</Holidays>
'''
doc = SimplifiedDoc(html)
Holidays = doc.select('Holidays')
Holidays.insertBefore("<UCCX>\n")
Holidays.insertAfter("\n</UCCX>")
print (doc.html)
© www.soinside.com 2019 - 2024. All rights reserved.