here is the XML:
<multi-routing-engine-results>
<multi-routing-engine-item>
<re-name>node0</re-name>
<source-resource-usage-pool-information>
<resource-usage-entry style="pat-pool">
<resource-usage-pool-name>gos_src_pool_198_169_34_113</resource-usage-pool-name>
<resource-usage-total-address>1</resource-usage-total-address>
<resource-usage-port-ol-factor>1</resource-usage-port-ol-factor>
<resource-usage-total-total>64512</resource-usage-total-total>
<resource-usage-total-used>2501</resource-usage-total-used>
<resource-usage-total-avail>62011</resource-usage-total-avail>
<resource-usage-total-usage>3%</resource-usage-total-usage>
<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-entry>
<resource-usage-entry style="pat-pool">
<resource-usage-address>198.169.34.113</resource-usage-address>
<resource-usage-factor-index>0</resource-usage-factor-index>
<resource-usage-port-range>Single Ports</resource-usage-port-range>
<resource-usage-used>2501</resource-usage-used>
<resource-usage-avail>59963</resource-usage-avail>
<resource-usage-total>62464</resource-usage-total>
<resource-usage-usage>4%</resource-usage-usage>
</resource-usage-entry>
<resource-usage-entry style="pat-pool">
<resource-usage-factor-index>-</resource-usage-factor-index>
<resource-usage-port-range>Alg Ports</resource-usage-port-range>
<resource-usage-used>0</resource-usage-used>
<resource-usage-avail>2048</resource-usage-avail>
<resource-usage-total>2048</resource-usage-total>
<resource-usage-usage>0%</resource-usage-usage>
</resource-usage-entry>
</source-resource-usage-pool-information>
</multi-routing-engine-item>
<multi-routing-engine-item>
<re-name>node1</re-name>
<source-resource-usage-pool-information>
<resource-usage-entry style="pat-pool">
<resource-usage-pool-name>gos_src_pool_198_169_34_113</resource-usage-pool-name>
<resource-usage-total-address>1</resource-usage-total-address>
<resource-usage-port-ol-factor>1</resource-usage-port-ol-factor>
<resource-usage-total-total>64512</resource-usage-total-total>
<resource-usage-total-used>2585</resource-usage-total-used>
<resource-usage-total-avail>61927</resource-usage-total-avail>
<resource-usage-total-usage>4%</resource-usage-total-usage>
<resource-usage-peak-usage>0%</resource-usage-peak-usage>
<resource-usage-peak-date-time seconds="0">1969-12-31 18:00:00 CST</resource-usage-peak-date-time>
</resource-usage-entry>
<resource-usage-entry style="pat-pool">
<resource-usage-address>198.169.34.113</resource-usage-address>
<resource-usage-factor-index>0</resource-usage-factor-index>
<resource-usage-port-range>Single Ports</resource-usage-port-range>
<resource-usage-used>2585</resource-usage-used>
<resource-usage-avail>59879</resource-usage-avail>
<resource-usage-total>62464</resource-usage-total>
<resource-usage-usage>4%</resource-usage-usage>
</resource-usage-entry>
<resource-usage-entry style="pat-pool">
<resource-usage-factor-index>-</resource-usage-factor-index>
<resource-usage-port-range>Alg Ports</resource-usage-port-range>
<resource-usage-used>0</resource-usage-used>
<resource-usage-avail>2048</resource-usage-avail>
<resource-usage-total>2048</resource-usage-total>
<resource-usage-usage>0%</resource-usage-usage>
</resource-usage-entry>
</source-resource-usage-pool-information>
</multi-routing-engine-item>
</multi-routing-engine-results>
Now I find what I need to extract is: 'resource-usage-pool-name','resource-usage-address','resource-usage-usage'
using this code:
root2 = ET.fromstring(output3)
n = 0
contents = ['resource-usage-pool-name','resource-usage-address','resource-usage-usage']
for elem in root.findall(".//resource-usage-entry/*"):
for con in elem.iter():
if con.tag in contents:
if con.tag == 'resource-usage-pool-name':
rpn.append(elem.text)
if con.tag == 'resource-usage-address':
rua.append(elem.text)
if con.tag == 'resource-usage-usage':
ruu.append(elem.text.replace("%",""))
f.close()
fxml.close()
x = len(rpn)
y = len(rua)
z = len(ruu)
print("rpn x:" + str(x))
print("ruu y:" + str(y))
print("rua z:" + str(z))
but the output I get is
rpn x:2
ruu y:0
rua z:0
poolalert:0
poolalert:0
[root@RHEL8-20230921 junos-pyezP311]#
so for some reason 'resource-usage-address','resource-usage-usage' are not getting pulled into their array, any ideas?
here is the XML:
<multi-routing-engine-results>
<multi-routing-engine-item>
<re-name>node0</re-name>
<source-resource-usage-pool-information>
<resource-usage-entry style="pat-pool">
<resource-usage-pool-name>gos_src_pool_198_169_34_113</resource-usage-pool-name>
<resource-usage-total-address>1</resource-usage-total-address>
<resource-usage-port-ol-factor>1</resource-usage-port-ol-factor>
<resource-usage-total-total>64512</resource-usage-total-total>
<resource-usage-total-used>2501</resource-usage-total-used>
<resource-usage-total-avail>62011</resource-usage-total-avail>
<resource-usage-total-usage>3%</resource-usage-total-usage>
<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-entry>
<resource-usage-entry style="pat-pool">
<resource-usage-address>198.169.34.113</resource-usage-address>
<resource-usage-factor-index>0</resource-usage-factor-index>
<resource-usage-port-range>Single Ports</resource-usage-port-range>
<resource-usage-used>2501</resource-usage-used>
<resource-usage-avail>59963</resource-usage-avail>
<resource-usage-total>62464</resource-usage-total>
<resource-usage-usage>4%</resource-usage-usage>
</resource-usage-entry>
<resource-usage-entry style="pat-pool">
<resource-usage-factor-index>-</resource-usage-factor-index>
<resource-usage-port-range>Alg Ports</resource-usage-port-range>
<resource-usage-used>0</resource-usage-used>
<resource-usage-avail>2048</resource-usage-avail>
<resource-usage-total>2048</resource-usage-total>
<resource-usage-usage>0%</resource-usage-usage>
</resource-usage-entry>
</source-resource-usage-pool-information>
</multi-routing-engine-item>
<multi-routing-engine-item>
<re-name>node1</re-name>
<source-resource-usage-pool-information>
<resource-usage-entry style="pat-pool">
<resource-usage-pool-name>gos_src_pool_198_169_34_113</resource-usage-pool-name>
<resource-usage-total-address>1</resource-usage-total-address>
<resource-usage-port-ol-factor>1</resource-usage-port-ol-factor>
<resource-usage-total-total>64512</resource-usage-total-total>
<resource-usage-total-used>2585</resource-usage-total-used>
<resource-usage-total-avail>61927</resource-usage-total-avail>
<resource-usage-total-usage>4%</resource-usage-total-usage>
<resource-usage-peak-usage>0%</resource-usage-peak-usage>
<resource-usage-peak-date-time seconds="0">1969-12-31 18:00:00 CST</resource-usage-peak-date-time>
</resource-usage-entry>
<resource-usage-entry style="pat-pool">
<resource-usage-address>198.169.34.113</resource-usage-address>
<resource-usage-factor-index>0</resource-usage-factor-index>
<resource-usage-port-range>Single Ports</resource-usage-port-range>
<resource-usage-used>2585</resource-usage-used>
<resource-usage-avail>59879</resource-usage-avail>
<resource-usage-total>62464</resource-usage-total>
<resource-usage-usage>4%</resource-usage-usage>
</resource-usage-entry>
<resource-usage-entry style="pat-pool">
<resource-usage-factor-index>-</resource-usage-factor-index>
<resource-usage-port-range>Alg Ports</resource-usage-port-range>
<resource-usage-used>0</resource-usage-used>
<resource-usage-avail>2048</resource-usage-avail>
<resource-usage-total>2048</resource-usage-total>
<resource-usage-usage>0%</resource-usage-usage>
</resource-usage-entry>
</source-resource-usage-pool-information>
</multi-routing-engine-item>
</multi-routing-engine-results>
Now I find what I need to extract is: 'resource-usage-pool-name','resource-usage-address','resource-usage-usage'
using this code:
root2 = ET.fromstring(output3)
n = 0
contents = ['resource-usage-pool-name','resource-usage-address','resource-usage-usage']
for elem in root.findall(".//resource-usage-entry/*"):
for con in elem.iter():
if con.tag in contents:
if con.tag == 'resource-usage-pool-name':
rpn.append(elem.text)
if con.tag == 'resource-usage-address':
rua.append(elem.text)
if con.tag == 'resource-usage-usage':
ruu.append(elem.text.replace("%",""))
f.close()
fxml.close()
x = len(rpn)
y = len(rua)
z = len(ruu)
print("rpn x:" + str(x))
print("ruu y:" + str(y))
print("rua z:" + str(z))
but the output I get is
rpn x:2
ruu y:0
rua z:0
poolalert:0
poolalert:0
[root@RHEL8-20230921 junos-pyezP311]#
so for some reason 'resource-usage-address','resource-usage-usage' are not getting pulled into their array, any ideas?
Share Improve this question asked Mar 4 at 12:48 robmrobm 1,1652 gold badges11 silver badges15 bronze badges 2 |1 Answer
Reset to default 0The problem could be related to how you append values to rua
and ruu
.
- You are iterating over
root.findall(".//resource-usage-entry/*")
, that means - elem pointing to direct child. Butelem.text
may not be referencing the intended child elements. - When checking if con.tag you appending elem.text, here may be con as the correct element to use.
- Just in case in the line with replacing: there could be an error with
None expressions
Try to modify in such way, I've added some comments next to fixes:
root2 = ET.fromstring(output3)
contents = ['resource-usage-pool-name', 'resource-usage-address', 'resource-usage-usage']
for elem in root2.findall(".//resource-usage-entry"):
for child in elem: # iterate over direct children of resource-usage-entry
if child.tag in contents:
if child.tag == 'resource-usage-pool-name':
rpn.append(child.text if child.text else "")
elif child.tag == 'resource-usage-address':
rua.append(child.text if child.text else "")
elif child.tag == 'resource-usage-usage':
ruu.append(child.text.replace("%", "") if child.text else "0") # handle None case
f.close()
fxml.close()
x = len(rpn)
y = len(rua)
z = len(ruu)
print("rpn x:", x)
print("rua y:", y)
print("ruu z:", z)
发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745042463a4607893.html
root2
fromoutput3
, but useroot
to iterate over the data. – Guy Commented Mar 4 at 13:48