1

I have an XML file having the information of meeting rooms availability details. I have written application to read that xml file and store the information into a two dictionaries, one for big meeting room and other for small meeting room. My task is to update "isMeetingRoomAvailable" parameter of xml for requested pattern.

For Eg: for TowerName = tower one, meetingRoomName = ABC and for MeetingRoomTimeStamp = "2018-05-31 00:45:00", I have to update isMeetingRoomAvailable value to 1.

Below is the snippet I wrote :

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 File from link...

<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>
2
  • Where does the "requested pattern" come from? I'm not seeing how the bigRoomAvailabilityDict and smallRoomAvailabilityDict have anything to do with the updateXML function (which is not called in your snippet). Commented Jun 4, 2018 at 20:57
  • I have read xml file stored data into bigRoomAvailabilityDict and smallRoomAvailabilityDict dictionaries as per requirement, later i have used these two dictionaries for some reference and now I have to update the xml file. I have completed reading xml file and checks logic is also done but I am stuck in updating xml file. Commented Jun 6, 2018 at 9:49

1 Answer 1

1

If we just focus on updating the XML, what I would do is pass the tree as an argument and pass a dict containing the other values.

You can use these values in xpath predicates to narrow down the element you want to update. This should be much simpler than using for loops to test element values.

Example...

Params from question (changed tower one to Tower one to match XML)

For Eg: for TowerName = Tower one, meetingRoomName = ABC and for MeetingRoomTimeStamp = "2018-05-31 00:45:00", I have to update isMeetingRoomAvailable value to 1.

XML Input (test.xml) (modified to be smaller than the original)

<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))

Output (from print)

<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>
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.