обновить xml файл с помощью lxml python - PullRequest
0 голосов
/ 02 июня 2018

У меня есть XML файл, содержащий информацию о наличии комнат для собраний.Я написал заявление, чтобы прочитать этот XML-файл и сохранить информацию в двух словарях, один для большой комнаты для собраний и другой для маленькой комнаты для собраний.Моя задача - обновить параметр «isMeetingRoomAvailable» в xml для запрошенного шаблона.

Для Например: для TowerName = tower one, meetingRoomName = ABC и для MeetingRoomTimeStamp = "2018-05-31 00:45:00", мне нужно обновить значение isMeetingRoomAvailable до 1.

Ниже приведен фрагмент, который я написал:

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>

1 Ответ

0 голосов
/ 06 июня 2018

Если мы просто сосредоточимся на обновлении XML, то я бы передал дерево в качестве аргумента и передал dict, содержащий другие значения.

Вы можете использовать эти значения в предикатах xpath, чтобы сузить элемент, который вы хотите обновить.Это должно быть намного проще, чем использование циклов for для проверки значений элементов.

Пример ...

Параметры из вопроса (для соответствия tower one на Tower oneXML)

Например, для TowerName = Tower one, meetingRoomName = ABC и MeetingRoomTimeStamp = "2018-05-31 00:45:00", мне нужно обновить значение isMeetingRoomAvailable до 1.

Ввод XML (test.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:45:00</MeetingRoomTimeStamp>
              <isMeetingRoomAvailable>0</isMeetingRoomAvailable>
            </MeetingRoomAvailabilityInfo>
            <MeetingRoomAvailabilityInfo>
              <MeetingRoomTimeStamp>2018-05-31 01: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>
          </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>
          </MeetingRoom>
        </SmallMeetingRooms>
      </MeetingRooms>
    </Tower>
  </Towers>
</root>

Python 3,6

from lxml import etree
import sys

tower_name = "Tower one"
meeting_room = "ABC"
timestamp = "2018-05-31 00:45:00"


def update_xml(to_update, params):
    try:
        node = to_update.xpath("/root/Towers/Tower[TowerName='{}']/MeetingRooms/*/"
                               "MeetingRoom[MeetingRoomName='{}']/"
                               "MeetingRoomAvailabilityInfo[MeetingRoomTimeStamp='{}']/isMeetingRoomAvailable"
                               .format(params.get("TowerName"), params.get("MeetingRoom"), params.get("timestamp")))[0]
    except IndexError:
        sys.exit("cant find the xpath to update")
    else:
        node.text = "1"


tree = etree.parse("test.xml")
update_xml(tree, {"TowerName": tower_name, "MeetingRoom": meeting_room, "timestamp": timestamp})

print(etree.tostring(tree, encoding="unicode", pretty_print=True))

Вывод (из печати)

<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:45:00</MeetingRoomTimeStamp>
              <isMeetingRoomAvailable>1</isMeetingRoomAvailable>
            </MeetingRoomAvailabilityInfo>
            <MeetingRoomAvailabilityInfo>
              <MeetingRoomTimeStamp>2018-05-31 01: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>
          </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>
          </MeetingRoom>
        </SmallMeetingRooms>
      </MeetingRooms>
    </Tower>
  </Towers>
</root>
...