How to Parse XML String in Python


We can make use of the xml.etree.ElementTree module, which is a part of the Python standard library to parse an XML String in Python.

Let us take a look at an example of parsing an XML String of stock prices data.

import xml.etree.ElementTree as ET

xml_string = '''
<stock_prices>
    <day date="2023-08-01">
        <symbol>CODE</symbol>
        <price>100.50</price>
    </day>
    <day date="2023-08-02">
        <symbol>CODE</symbol>
        <price>105.20</price>
    </day>
    <day date="2023-08-03">
        <symbol>CODE</symbol>
        <price>103.80</price>
    </day>
    <day date="2023-08-04">
        <symbol>CODE</symbol>
        <price>110.00</price>
    </day>
    <day date="2023-08-05">
        <symbol>CODE</symbol>
        <price>108.75</price>
    </day>
    <day date="2023-08-06">
        <symbol>CODE</symbol>
        <price>112.30</price>
    </day>
    <day date="2023-08-07">
        <symbol>CODE</symbol>
        <price>113.90</price>
    </day>
    <day date="2023-08-08">
        <symbol>CODE</symbol>
        <price>114.50</price>
    </day>
    <day date="2023-08-09">
        <symbol>CODE</symbol>
        <price>118.20</price>
    </day>
    <day date="2023-08-10">
        <symbol>CODE</symbol>
        <price>115.80</price>
    </day>
</stock_prices>
'''

root = ET.fromstring(xml_string)

stock_prices = []
for day_element in root.findall('day'):
    date = day_element.get('date')
    symbol = day_element.find('symbol').text
    price = float(day_element.find('price').text)
    stock_prices.append({'date': date, 'symbol': symbol, 'price': price})

for stock in stock_prices:
    print(stock)
Output:
Python Parse XML String Example Output

One other module that you can make use of is xml.dom.minidom.

import xml.dom.minidom

xml_string = '''
<stock_prices>
    <day date="2023-08-01">
        <symbol>CODE</symbol>
        <price>100.50</price>
    </day>
</stock_prices>
'''

dom = xml.dom.minidom.parseString(xml_string)

root = dom.documentElement

stock_prices = []
day_elements = root.getElementsByTagName('day')
for day_element in day_elements:
    date = day_element.getAttribute('date')
    symbol = day_element.getElementsByTagName('symbol')[0].childNodes[0].nodeValue
    price = float(day_element.getElementsByTagName('price')[0].childNodes[0].nodeValue)
    stock_prices.append({'date': date, 'symbol': symbol, 'price': price})

Facing issues? Have Questions? Post them here! I am happy to answer!

Author Info:

Rakesh (He/Him) has over 14+ years of experience in Web and Application development. He is the author of insightful How-To articles for Code2care.

Follow him on: X

You can also reach out to him via e-mail: rakesh@code2care.org

Copyright Β© Code2care 2024 | Privacy Policy | About Us | Contact Us | Sitemap