我有一个复杂的xml,我想从中提取数据。
<?xml version="1.0" ?>
<root xmlns="something.something.com">
<Save>
<AdditionalInfo>
<Name></Name>
<Time></Time>
<UtilityVersion></UtilityVersion>
<XMLVersion></XMLVersion>
<PluginName></PluginName>
<ClassName></ClassName>
</AdditionalInfo>
<Data>
<session>
<xyDataObjects>
<xyData Key="'info'" ObjectType="moreinfo" Type="evenmoreinfo">
<axis1QuantityType ObjectType="guesswhat" Type="info!">
<label></label>
<type></type>
</axis1QuantityType>
... and so on and so on
该文件有多个块,从保存和保存块开始和结束,我正在寻找的信息可以是标签,甚至更远。
ElementTree.Iter似乎是我的解决方案,因为它可以遍历每一个保存块并找到 <label>
我正在寻找的信息,但不幸的是,它不接受命名空间参数。
我还有什么其他选择?我试图让我的代码保持灵活,因为我预见到xml文件的结构可能会在未来发生变化,而且要简单,所以我宁愿不要实现类似的东西。
tree= ET.parse('dblank.xml')
root = tree.getroot()
for i in range(len(root)):
Array[i]=root[i][1][0][0][0][0][0].text
当你用命名空间处理xml时,你必须指定使用的命名空间.为此,我。
还要注意的是 找到所有 包含 一些。 作为元素名的初始部分。
试试下面的代码。
import xml.etree.ElementTree as et
tree = et.parse('Input.xml')
root = tree.getroot()
ns = {'some': 'something.something.com'}
for elem in root.findall('.//some:label', ns):
print(elem.text)
当然,这只是一个如何引用现有元素的例子,请根据自己的需要进行修改。