繁体   English   中英

如何使用python获取XML中的所有标签?

[英]How to get all the tags in an XML using python?

我一直在研究Python Docs中从XML文件中获取标记名称的方法,但是我并不是很成功。 使用下面的XML文件,您可以获取国家/地区名称标签及其所有关联的子标签。 有谁知道这是怎么做的?

<?xml version="1.0"?>
<data>
    <country name="Liechtenstein">
        <rank>1</rank>
        <year>2008</year>
        <gdppc>141100</gdppc>
        <neighbor name="Austria" direction="E"/>
        <neighbor name="Switzerland" direction="W"/>
    </country>
    <country name="Singapore">
        <rank>4</rank>
        <year>2011</year>
        <gdppc>59900</gdppc>
        <neighbor name="Malaysia" direction="N"/>
    </country>
    <country name="Panama">
        <rank>68</rank>
        <year>2011</year>
        <gdppc>13600</gdppc>
        <neighbor name="Costa Rica" direction="W"/>
        <neighbor name="Colombia" direction="E"/>
    </country>
</data>

考虑使用元素树的iterparse()并构建标记和文本对的嵌套列表。 if有条件, if逻辑将国家/地区项目组合在一起,并保留没有文本的元素,则使用replace()清除换行符和iterparse()拾取的多个空白:

import xml.etree.ElementTree as et

data = []
for (ev, el) in et.iterparse(path):
    inner = []

    if el.tag == 'country':        
        for name, value in el.items():
            inner.append([el.tag+'-'+name, str(value).replace('\n','').replace(' ','')])
        for i in el:
            if str(i.text) != 'None':
                inner.append([i.tag, str(i.text).replace('\n','').replace(' ','')])

            for name, value in i.items():
                inner.append([i.tag+'-'+name, str(value).replace('\n','').replace(' ','')])
        data.append(inner)

print(data)
# [[['country-name', 'Liechtenstein'], ['rank', '1'], ['year', '2008'], ['gdppc', '141100'], 
#   ['neighbor-name', 'Austria'], ['neighbor-direction', 'E'], 
#   ['neighbor-name', 'Switzerland'], ['neighbor-direction', 'W']]
#  [['country-name', 'Singapore'], ['rank', '4'], ['year', '2011'], ['gdppc', '59900'], 
#   ['neighbor-name', 'Malaysia'], ['neighbor-direction', 'N']]
#  [['country-name', 'Panama'], ['rank', '68'], ['year', '2011'], ['gdppc', '13600'], 
#   ['neighbor-name', 'CostaRica'], ['neighbor-direction', 'W'], 
#   ['neighbor-name', 'Colombia'], ['neighbor-direction', 'E']]]

查看Python的内置XML功能,以递归方式遍历文档,并将所有标签收集到一个集合中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM