【问题标题】:Finding Tags within an XML file with Python使用 Python 在 XML 文件中查找标签
【发布时间】:2020-03-20 04:04:42
【问题描述】:

我的 python 代码需要一些帮助来处理 XML 文件。我想获取子标签并将它们存储在列表中并用它们做一些事情。直到现在我的代码还在工作,因为我认为 XML 结构对于我拥有的每个文件都是相同的。所以我使用 ElementTree 库进行解析等,然后使用 .findall(tagname) ,然后我对列表做了一些处理。但后来我意识到有些文件有更多的标签,因此我没有得到我需要的一切。为了给你一个想法,

<parent tag (same for every file)>
  <tag1>
    .....
  </tag1>
  <tag2>
    .....
  </tag2>
  <tag3>
    .....
  </tag3>
  <unknown tag1>
    .....
  </unknown tag1>
  <unknown tag2>
    .....
  </unknown tag2>
  <tag2>
    .....
  </tag2>
  <tag2>
    .....
  </tag2>
  <unknown tag1>
    .....
  </unknown tag1>
</parent tag>

所以我目前的代码是:

list1 = root.findall('tag1')
list2 = root.findall('tag2')
list3 = root.findall('tag3')

然后我为那些工作的标签中的内容做一些事情。我需要有关如何检测父标签下的每个标签的帮助,然后将它们存储在一个列表中,以便我可以为列表中的每个标签执行 findall() 函数。类似的东西

List_of_tags = [tag1, tag2, tag3, unknown tag1, etc]

for tag in list_of_tags:

....

提前谢谢你!

我实际上是这样用 ElemntTree 解析 xml 文件的:

try:
    tree = ET.parse(filename)
except IOError as e:
    print 'No such file or directory'
else:
    root = tree.getroot()

【问题讨论】:

    标签: python python-3.x xml xml-parsing


    【解决方案1】:

    您可以使用xmltodict

    pip install xmltodict
    

    下面是如何获取父标签下的所有子标签

    import xmltodict
    my_xml = """<parent_tag>
      <tag1>
        .....
      </tag1>
      <tag2>
        .....
      </tag2>
      <tag3>
        .....
      </tag3>
      <unknown_tag1>
        .....
      </unknown_tag1>
      <unknown_tag2>
        .....
      </unknown_tag2>
      <tag2>
        .....
      </tag2>
      <tag2>
        .....
      </tag2>
      <unknown_tag1>
        .....
      </unknown_tag1>
    </parent_tag>"""
    
    xmld = xmltodict.parse(my_xml)
    
    child_tags = xmld['parent_tag'].keys()
    
    for child_tag in child_tags:
        print(child_tag)
    

    输出将如下所示:

    tag1
    tag2
    tag3
    unknown_tag1
    unknown_tag2
    

    【讨论】:

    • 首先,感谢您抽出宝贵时间。我实际上用元素树解析了 xml 文件,然后我得到了根。我使用了您的代码,而不是 my_xml 我正在考虑使用 root。但我收到一个错误“必须是字符串或只读缓冲区,而不是元素”。我尝试了 fromstring() 方法,但我得到了同样的错误。你能帮忙吗?
    • 您能否更新您的问题以包括您如何解析 xml 文件
    • 我刚做了,抱歉
    • 看看这是否有助于您将元素树转换为字符串stackoverflow.com/questions/15304229/…
    • 如果您想使用元素树而不是 xmltodict 来执行此操作,您可能会发现这也很有帮助。 stackoverflow.com/questions/10408927/…
    【解决方案2】:

    ----- 解决方案-----

    child_tags = root.getchildren()
    for child in child_tags:
        k = child.tag
        tags.append(k)
    
    for tag in tags:
        list1 = root.findall(tag)
        tagslist = tagslist + list1
    
    #remove duplicates
    tagslist = list(dict.fromkeys(tagslist))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-13
      • 2014-09-15
      • 2023-04-11
      • 1970-01-01
      • 2021-11-17
      相关资源
      最近更新 更多