我有数据,额外信息的最佳方式是什么: 下面是pesudo代码。 XML数据:
<nf:data>
<show>
<ip>
<mroute>
<__XML__OPT_Cmd_mrib_show_mroute_command>
<__XML__BLK_Cmd_mrib_show_mroute_command_source>
<__XML__OPT_Cmd_mrib_show_mroute_command_source>
<__XML__OPT_Cmd_mrib_show_mroute_command_group>
<group>
<__XML__PARAM_value>239.16.110.124</__XML__PARAM_value>
</group>
</__XML__OPT_Cmd_mrib_show_mroute_command_group>
</__XML__OPT_Cmd_mrib_show_mroute_command_source>
</__XML__BLK_Cmd_mrib_show_mroute_command_source>
<__XML__OPT_Cmd_mrib_show_mroute_command_vrf>
<__XML__OPT_Cmd_mrib_show_mroute_command___readonly__>
<__readonly__>
<TABLE_vrf>
<ROW_vrf>
<vrf-name>default</vrf-name>
<route_count>10623</route_count>
<star_g_cnt>4842</star_g_cnt>
<sg_cnt>5780</sg_cnt>
<star_g_prfx_cnt>1</star_g_prfx_cnt>
<TABLE_one_route>
<ROW_one_route>
<mcast-addrs>(192.168.2.28/32, 239.16.110.124/32)</mcast-addrs>
<pending>false</pending>
<bidir>false</bidir>
<uptime>3w6d</uptime>
<mofrr>false</mofrr>
<TABLE_mpib>
<ROW_mpib>
<mpib-name>pim</mpib-name>
<oif-count>2</oif-count>
<stale-route>false</stale-route>
</ROW_mpib>
<ROW_mpib>
<mpib-name>ip</mpib-name>
<oif-count>0</oif-count>
<stale-route>false</stale-route>
</ROW_mpib>
</TABLE_mpib>
<stats-pkts>625954</stats-pkts>
<stats-bytes>31923654</stats-bytes>
<stats-rate-buf>108.800 bps</stats-rate-buf>
<route-iif>Ethernet2/1</route-iif>
<rpf-nbr>192.168.1.251</rpf-nbr>
<mofrr-iif>Null</mofrr-iif>
<mofrr-nbr>0.0.0.0</mofrr-nbr>
<internal>false</internal>
<oif-count>2</oif-count>
<fabric-oif>false</fabric-oif>
<fabric-loser>false</fabric-loser>
<TABLE_oif>
<ROW_oif>
<oif-name>Ethernet2/32</oif-name>
<oif-uptime>3w6d</oif-uptime>
<TABLE_oif_mpib>
<ROW_oif_mpib>
<oif-mpib-name>pim</oif-mpib-name>
<stale-oif>false</stale-oif>
<omd-vpc-svi>false</omd-vpc-svi>
</ROW_oif_mpib>
</TABLE_oif_mpib>
<rpf>false</rpf>
</ROW_oif>
<ROW_oif>
<oif-name>Ethernet1/32</oif-name>
<oif-uptime>3w6d</oif-uptime>
<TABLE_oif_mpib>
<ROW_oif_mpib>
<oif-mpib-name>pim</oif-mpib-name>
<stale-oif>false</stale-oif>
<omd-vpc-svi>false</omd-vpc-svi>
</ROW_oif_mpib>
</TABLE_oif_mpib>
<rpf>false</rpf>
</ROW_oif>
</TABLE_oif>
</ROW_one_route>
</TABLE_one_route>
</ROW_vrf>
</TABLE_vrf>
</__readonly__>
</__XML__OPT_Cmd_mrib_show_mroute_command___readonly__>
</__XML__OPT_Cmd_mrib_show_mroute_command_vrf>
</__XML__OPT_Cmd_mrib_show_mroute_command>
</mroute>
</ip>
</show>
</nf:data>
</nf:rpc-reply>
需要解析以下内容:
1.登录开关
2.发现外观:
3.循环:( nf:data&gt; show&gt; ip&gt; mroute&gt; TABLE_vrf&gt; ROW_vrf&gt; TABLE_one_route&gt; ROW_one_route)
4。
伪代码:
for loop ROW_one_route
if mcast-addrs startswith (*,)
skip
if mcast-addrs startswith (\d)
parse following information:
forloop TABLE_oif > ROW_oif
statbps = stats-rate-buf
statpkt = stats-pkts
if oif-name startswith (vlan*)
skip
if oif-name startstwith (eth)
find oif-name
outint.append(oif-name)
提取信息的最佳方式是什么?感谢您的所有意见。
答案 0 :(得分:1)
以下任何一项都无法正确打开您的xml文件:
xml2dict
,ElementTree
和minidom
我开始使用之前从未使用的BeautifulSoup
,令人惊讶的是,它有效!
fp = open('test.xml')
soup = BeautifulSoup(fp, 'xml')
items = soup.find_all('oif-name')
for item in items:
print item
print item.get_text()
需要解析以下内容: nf:data&gt;显示&gt; ip&gt; mroute&gt; TABLE_vrf&gt; ROW_vrf&gt; TABLE_one_route&gt; ROW_one_route oif-name
输出:
<oif-name>Ethernet2/32</oif-name>
Ethernet2/32
<oif-name>Ethernet1/32</oif-name>
Ethernet1/32
答案 1 :(得分:0)
您可以考虑使用lxml objectify。它是python的一个模块,它允许您处理xml文件,就好像它们是普通的python对象层次结构一样。请查看@ http://lxml.de/objectify.html。