【发布时间】:2018-06-02 16:04:26
【问题描述】:
我有一个XML 文件,其中包含会议室可用性详细信息。 我已经编写了应用程序来读取该 xml 文件并将信息存储到两个字典中,一个用于大会议室,另一个用于小会议室。我的任务是为请求的模式更新 xml 的“isMeetingRoomAvailable”参数。
例如: 对于 TowerName = 第一塔,meetingRoomName = ABC 和 MeetingRoomTimeStamp = "2018-05-31 00:45:00",我必须将 isMeetingRoomAvailable 值更新为 1。
下面是我写的sn-p:
from lxml import etree
root = etree.parse('test.xml')
bigRoomAvailabilityDict = {}
smallRoomAvailabilityDict = {}
towerNames = root.xpath("/root/Towers/Tower/TowerName")
MeetingRoomNames = root.xpath("/root/Towers/Tower/MeetingRooms/BigMeetingRooms/MeetingRoom/MeetingRoomName")
for tower in root.xpath("/root/Towers/Tower"):
towerName = tower.xpath("TowerName")[0].text
for lr in tower.xpath("MeetingRooms/BigMeetingRooms/MeetingRoom"):
meetingRoomName = lr.xpath("MeetingRoomName")[0].text
MeetingRoomMailId = lr.xpath("MeetingRoomMailId")[0].text
str = towerName + " " + meetingRoomName + " " + MeetingRoomMailId
for timeAvai in lr.xpath("MeetingRoomAvailabilityInfo"):
time = timeAvai.xpath("MeetingRoomTimeStamp")[0].text
isAvai = timeAvai.xpath("isMeetingRoomAvailable")[0].text
key = str + " " + time
bigRoomAvailabilityDict[key] = isAvai
for small in tower.xpath("MeetingRooms/SmallMeetingRooms/MeetingRoom"):
meetingRoomName = small.xpath("MeetingRoomName")[0].text
MeetingRoomMailId = small.xpath("MeetingRoomMailId")[0].text
str = towerName + " " + meetingRoomName + " " + MeetingRoomMailId
for timeAvai in small.xpath("MeetingRoomAvailabilityInfo"):
time = timeAvai.xpath("MeetingRoomTimeStamp")[0].text
isAvai = timeAvai.xpath("isMeetingRoomAvailable")[0].text
key = str + " " + time
smallRoomAvailabilityDict[key] = isAvai
def updateXML(towerName, meetinRoomName, timeStampVal):
roomsFromXml = root.xpath("/root/Towers/Tower/MeetingRooms/BigMeetingRooms/MeetingRoom")
# print(roomsFromXml)
for index in roomsFromXml:
roomNames = index.xpath("MeetingRoomName")
for rooms in roomNames:
# print(rooms.text)
if rooms.text == meetinRoomName:
allTimeStamps = index.xpath("MeetingRoomAvailabilityInfo")
for timeStamps in allTimeStamps:
counter = 0
for myTime in timeStamps.xpath("MeetingRoomTimeStamp"):
counter += 1
if myTime.text == timeStampVal:
break
for isAvai in timeStamps.xpath("isMeetingRoomAvailable"):
counter -= 1
if counter == 0:
isAvai.text = 1
# for key, value in bigRoomAvailabilityDict.items():
# print(key, " " , value)
来自链接的 XML 文件...
<root>
<Towers>
<Tower>
<TowerName>Tower one</TowerName>
<MeetingRooms>
<BigMeetingRooms>
<MeetingRoom>
<MeetingRoomName>ABC</MeetingRoomName>
<MeetingRoomMailId>mail_id_ABC</MeetingRoomMailId>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 00:00:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 00:15:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 00:30:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 00:45:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 01:00:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 01:15:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 01:30:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 01:45:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 02:00:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 02:15:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 02:30:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 02:45:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 03:00:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 03:15:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 03:30:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 03:45:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 04:00:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 04:15:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 04:30:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 04:45:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 05:00:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
</MeetingRoom>
<MeetingRoom>
<MeetingRoomName>JKL</MeetingRoomName>
<MeetingRoomMailId>mail_id_JKL</MeetingRoomMailId>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 00:00:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 00:15:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 00:30:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 00:45:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 01:00:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 01:15:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 01:30:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 01:45:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 02:00:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 02:15:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 02:30:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 02:45:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 03:00:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 03:15:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 03:30:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 03:45:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 04:00:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 04:15:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 04:30:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 04:45:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 05:00:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
</MeetingRoom>
</BigMeetingRooms>
<SmallMeetingRooms>
<MeetingRoom>
<MeetingRoomName>XYZ</MeetingRoomName>
<MeetingRoomMailId>mail_id_XYZ</MeetingRoomMailId>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 00:00:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 00:15:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 00:30:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 00:45:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 01:00:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 01:15:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 01:30:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 01:45:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 02:00:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 02:15:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 02:30:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 02:45:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 03:00:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 03:15:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 03:30:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 03:45:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 04:00:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 04:15:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 04:30:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 04:45:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
<MeetingRoomAvailabilityInfo>
<MeetingRoomTimeStamp>2018-05-31 05:00:00</MeetingRoomTimeStamp>
<isMeetingRoomAvailable>0</isMeetingRoomAvailable>
</MeetingRoomAvailabilityInfo>
</MeetingRoom>
</SmallMeetingRooms>
</MeetingRooms>
</Tower>
</Towers>
</root>
【问题讨论】:
-
“请求的模式”从何而来?我没有看到
bigRoomAvailabilityDict和smallRoomAvailabilityDict与updateXML函数(在你的 sn-p 中没有调用)有什么关系。 -
我已根据要求将 xml 文件存储的数据读入
bigRoomAvailabilityDict和smallRoomAvailabilityDict字典,后来我使用这两个字典作为参考,现在我必须更新 xml 文件。我已完成读取 xml 文件并检查逻辑也已完成,但我一直在更新 xml 文件。
标签: xml python-3.x lxml