搜索XML属性来解析XML元素
问题描述:
我想解析基于某些XML属性的XML元素。我的XML文件是:搜索XML属性来解析XML元素
<?xml version="1.0" encoding="utf-8"?>
<products updated="9/1/2017">
<product name="o365">
<addresslist type="IPv6">
<address>2603:1020:200::682f:a1d8/128</address>
<address>2603:1020:201::3c4/128</address>
<address>2603:1030:603::6a/128</address>
<address>2603:1030:603::72/128</address>
我不能让我的代码工作,但我怀疑有更好的方法来解决这个问题。我想所有地址元素;如果产品名称= “O365”和AddressList中是“TYPE =” IPv6" 的我的代码是:
tree = ET.fromstring(r.text)
for node in tree.iter('product'):
list = node.attrib.get('addresslist')
address = node.attrib.get('address')
if list and address:
print ' %s :: %s' % (list, address)
else:
print name
答
这个工作对我来说:
import xml.etree.ElementTree as ET
tree = ET.parse('1.xml')
for x in tree.iter('product'):
if x.attrib.get('name') == 'o365':
for y in tree.iter('addresslist'):
if y.attrib.get('type') == 'IPv6':
for z in tree.iter('address'):
print z.text
与下面的输出:
2603:1020:200::682f:a1d8/128
2603:1020:201::3c4/128
2603:1030:603::6a/128
2603:1030:603::72/128
+0
所以这里是我解析的完整URL:https://support.content.office.net/en-us/static/O365IPAddresses.xml。当我运行你的代码时,它显示的条目多于IPv6部分? (我不期望它) – EthanB
您使用的是内置的ElementTree,或者你有还安装了lxml吗? – Tomalak