Python 从xml到封面需求列表
我想从一个xml文件中创建一个列表,以了解我在d天和s班需要多少员工 为此,这里有一个xml示例:Python 从xml到封面需求列表,python,xml,list,Python,Xml,List,我想从一个xml文件中创建一个列表,以了解我在d天和s班需要多少员工 为此,这里有一个xml示例: <CoverRequirements> <DayOfWeekCover> <Day>Monday</Day> <Cover> <Shift>E</Shift> <Preferred>2</Preferred> <
<CoverRequirements>
<DayOfWeekCover>
<Day>Monday</Day>
<Cover>
<Shift>E</Shift>
<Preferred>2</Preferred>
</Cover>
<Cover>
<Shift>L</Shift>
<Preferred>2</Preferred>
</Cover>
<Cover>
<Shift>N</Shift>
<Preferred>1</Preferred>
</Cover>
</DayOfWeekCover>
<DayOfWeekCover>
<Day>Tuesday</Day>
<Cover>
<Shift>E</Shift>
<Preferred>2</Preferred>
</Cover>
现在,我如何添加它们来创建一个列表以获得格式,这样当我请求星期一班次E时,我可以得到值2,如:
- 周一班次E:2
- 周一班次L:1
- 周二筛选E:2
- [……]
.iter()
遍历树,并使用状态机之类的东西将数据收集到dict中。这假设节点顺序始终是Day/Shift/Preferred,而不是Day/Preferred/Shift
import xml.etree.ElementTree as ET
from pprint import pprint
xml = ET.XML(
"""
<CoverRequirements>
<DayOfWeekCover>
<Day>Monday</Day>
<Cover>
<Shift>E</Shift>
<Preferred>2</Preferred>
</Cover>
<Cover>
<Shift>L</Shift>
<Preferred>2</Preferred>
</Cover>
<Cover>
<Shift>N</Shift>
<Preferred>1</Preferred>
</Cover>
</DayOfWeekCover>
<DayOfWeekCover>
<Day>Tuesday</Day>
<Cover>
<Shift>E</Shift>
<Preferred>2</Preferred>
</Cover>
</DayOfWeekCover>
</CoverRequirements>
"""
)
current_day = None
current_shift = None
preferences = {}
for el in xml.iter():
if el.tag == "Day":
current_day = el.text
current_shift = None
elif el.tag == "Shift":
current_shift = el.text
elif el.tag == "Preferred":
preferences[(current_day, current_shift)] = el.text
current_shift = None
pprint(preferences)
然后,您可以像查询任何其他dict一样查询dict
import xml.etree.ElementTree as ET
from pprint import pprint
xml = ET.XML(
"""
<CoverRequirements>
<DayOfWeekCover>
<Day>Monday</Day>
<Cover>
<Shift>E</Shift>
<Preferred>2</Preferred>
</Cover>
<Cover>
<Shift>L</Shift>
<Preferred>2</Preferred>
</Cover>
<Cover>
<Shift>N</Shift>
<Preferred>1</Preferred>
</Cover>
</DayOfWeekCover>
<DayOfWeekCover>
<Day>Tuesday</Day>
<Cover>
<Shift>E</Shift>
<Preferred>2</Preferred>
</Cover>
</DayOfWeekCover>
</CoverRequirements>
"""
)
current_day = None
current_shift = None
preferences = {}
for el in xml.iter():
if el.tag == "Day":
current_day = el.text
current_shift = None
elif el.tag == "Shift":
current_shift = el.text
elif el.tag == "Preferred":
preferences[(current_day, current_shift)] = el.text
current_shift = None
pprint(preferences)
{('Monday', 'E'): '2',
('Monday', 'L'): '2',
('Monday', 'N'): '1',
('Tuesday', 'E'): '2'}