I have the following xml:
<multi-routing-engine-results>
<multi-routing-engine-item>
<re-name>node0</re-name>
<source-resource-usage-pool-information>
<resource-usage-entry style="all-pat-pool">
<resource-usage-pool-name>pool_192_168_1_113</resource-usage-pool-name>
<resource-usage-total-pool-num>57</resource-usage-total-pool-num>
<resource-usage-port-ol-factor>1</resource-usage-port-ol-factor>
<resource-usage-peak-usage>21%</resource-usage-peak-usage>
<resource-usage-peak-date-time seconds="1736272550">2025-01-07 11:55:50 CST</resource-usage-peak-date-time>
<resource-usage-total-address>1</resource-usage-total-address>
<resource-usage-total-used>7741</resource-usage-total-used>
<resource-usage-total-avail>56771</resource-usage-total-avail>
<resource-usage-total-total>64512</resource-usage-total-total>
<resource-usage-total-usage>11%</resource-usage-total-usage>
</resource-usage-entry>
<resource-usage-entry style="all-pat-pool">
<resource-usage-pool-name>pool_192_168_1_114</resource-usage-pool-name>
<resource-usage-total-pool-num>57</resource-usage-total-pool-num>
<resource-usage-port-ol-factor>1</resource-usage-port-ol-factor>
<resource-usage-peak-usage>8%</resource-usage-peak-usage>
<resource-usage-peak-date-time seconds="1734024324">2024-12-12 11:25:24 CST</resource-usage-peak-date-time>
<resource-usage-total-address>1</resource-usage-total-address>
<resource-usage-total-used>2520</resource-usage-total-used>
<resource-usage-total-avail>61992</resource-usage-total-avail>
<resource-usage-total-total>64512</resource-usage-total-total>
<resource-usage-total-usage>3%</resource-usage-total-usage>
</resource-usage-entry>
<resource-usage-entry style="all-pat-pool">
<resource-usage-pool-name>gos_src_pool_207_195_114_101</resource-usage-pool-name>
<resource-usage-total-pool-num>57</resource-usage-total-pool-num>
<resource-usage-port-ol-factor>1</resource-usage-port-ol-factor>
<resource-usage-peak-usage>32%</resource-usage-peak-usage>
<resource-usage-peak-date-time seconds="1733419670">2024-12-05 11:27:50 CST</resource-usage-peak-date-time>
<resource-usage-total-address>1</resource-usage-total-address>
<resource-usage-total-used>15115</resource-usage-total-used>
<resource-usage-total-avail>49397</resource-usage-total-avail>
<resource-usage-total-total>64512</resource-usage-total-total>
<resource-usage-total-usage>23%</resource-usage-total-usage>
</resource-usage-entry>
<resource-usage-entry style="all-pat-pool">
<resource-usage-pool-name>gos_src_pool_207_195_114_103</resource-usage-pool-name>
<resource-usage-total-pool-num>57</resource-usage-total-pool-num>
<resource-usage-port-ol-factor>1</resource-usage-port-ol-factor>
<resource-usage-peak-usage>19%</resource-usage-peak-usage>
<resource-usage-peak-date-time seconds="1739283197">2025-02-11 08:13:17 CST</resource-usage-peak-date-time>
<resource-usage-total-address>1</resource-usage-total-address>
<resource-usage-total-used>7920</resource-usage-total-used>
<resource-usage-total-avail>56592</resource-usage-total-avail>
<resource-usage-total-total>64512</resource-usage-total-total>
<resource-usage-total-usage>12%</resource-usage-total-usage>
</resource-usage-entry>
</source-resource-usage-pool-information>
</multi-routing-engine-item>
</multi-routing-engine-results>
then I tried to parse out all the pool_192_168_1_ valuesbut this fails and returns nothing, any ideas?
outputxml1 = etree.tostring(rpc_xml, encoding='unicode')
root = ET.fromstring(outputxml1)
x = 1
for item in root.findall('./multi-routing-engine-results/multi-routing-engine-item/re-name/source-resource-usage-pool-information/resource-usage-pool-name'):
print(str(item))
x = x + 1
Such a flat xml structure is ideal for pandas
. Than you can write the table data to .csv or to Excel:
import pandas as pd
xml_ = """<multi-routing-engine-results>
<multi-routing-engine-item>
<re-name>node0</re-name>
<source-resource-usage-pool-information>
<resource-usage-entry style="all-pat-pool">
<resource-usage-pool-name>pool_192_168_1_113</resource-usage-pool-name>
<resource-usage-total-pool-num>57</resource-usage-total-pool-num>
<resource-usage-port-ol-factor>1</resource-usage-port-ol-factor>
<resource-usage-peak-usage>21%</resource-usage-peak-usage>
<resource-usage-peak-date-time seconds="1736272550">2025-01-07 11:55:50 CST</resource-usage-peak-date-time>
<resource-usage-total-address>1</resource-usage-total-address>
<resource-usage-total-used>7741</resource-usage-total-used>
<resource-usage-total-avail>56771</resource-usage-total-avail>
<resource-usage-total-total>64512</resource-usage-total-total>
<resource-usage-total-usage>11%</resource-usage-total-usage>
</resource-usage-entry>
<resource-usage-entry style="all-pat-pool">
<resource-usage-pool-name>pool_192_168_1_114</resource-usage-pool-name>
<resource-usage-total-pool-num>57</resource-usage-total-pool-num>
<resource-usage-port-ol-factor>1</resource-usage-port-ol-factor>
<resource-usage-peak-usage>8%</resource-usage-peak-usage>
<resource-usage-peak-date-time seconds="1734024324">2024-12-12 11:25:24 CST</resource-usage-peak-date-time>
<resource-usage-total-address>1</resource-usage-total-address>
<resource-usage-total-used>2520</resource-usage-total-used>
<resource-usage-total-avail>61992</resource-usage-total-avail>
<resource-usage-total-total>64512</resource-usage-total-total>
<resource-usage-total-usage>3%</resource-usage-total-usage>
</resource-usage-entry>
</source-resource-usage-pool-information>
</multi-routing-engine-item>
</multi-routing-engine-results>"""
df = pd.read_xml(xml_, xpath= ".//resource-usage-entry")
print(df)
And if you need the seconds attributes too:
a = pd.read_xml(xml_, xpath= ".//resource-usage-entry")
b = pd.read_xml(xml_, xpath= ".//resource-usage-peak-date-time[@seconds]")
df = pd.merge(a, b)
print(df)
With xml.etree.ElementTree
:
import xml.etree.ElementTree as ET
root = ET.parse("example.xml").getroot()
for elem in root.findall(".//resource-usage-pool-name"):
print(f"{elem.tag}: {elem.text:>40}")
Output:
resource-usage-pool-name: pool_192_168_1_113
resource-usage-pool-name: pool_192_168_1_114
resource-usage-pool-name: gos_src_pool_207_195_114_101
resource-usage-pool-name: gos_src_pool_207_195_114_103