Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从xml到封面需求列表_Python_Xml_List - Fatal编程技术网

Python 从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> <

我想从一个xml文件中创建一个列表,以了解我在d天和s班需要多少员工

为此,这里有一个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>
现在,我如何添加它们来创建一个列表以获得格式,这样当我请求星期一班次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'}