【问题标题】:How to get parent tag attributes of lxml.etree like 'KEY', 'NAME', Python 3.6如何获取 lxml.etree 的父标签属性,如“KEY”、“NAME”、Python 3.6
【发布时间】:2019-09-27 07:59:43
【问题描述】:

我想为 XML 标记查找父级,如何获取标记属性。

import requests
from lxml import etree
from io import StringIO, BytesIO

Request_URL = 'http://dataportal.ins.tn/WebApi/GetDimensionElements'
Method_Post_Body = "<QueryMessage lcid='1033'> <DataWhere> <DimensionId>OBJ5258839</DimensionId> </DataWhere> </QueryMessage>"
Post_Response = requests.post(Request_URL, data=Method_Post_Body, headers={'Content-type': 'text/xml'})

XRoot = etree.fromstring(Post_Response.content)
for Tag_1 in XRoot[1]:
    for element in Tag_1.iter():
    if element.getparent() is not None:
        print("parent-path:", element.getroottree().getpath(element.getparent())) 

【问题讨论】:

  • 你的预期输出是什么?
  • @Jack Fleeting,想要获取 XML 中每个节点的键/代码等父属性值
  • 类似('Key', '27880159'), ('Name', 'Nom')?
  • @Jack Fleeting,是的,我需要这样

标签: python python-3.x pandas dataframe lxml


【解决方案1】:

这段代码应该为您提供几个带有键/值对的元组列表:

for i in XRoot.xpath("//*['Key']"):
    print(i.items())

示例输出:

[('Id', 'FULLNAME'), ('Key', '27880399'), ('Name', 'Nom complet')]

然后您可以将它们添加到数据框或其他任何内容中。

【讨论】:

    【解决方案2】:

    以下代码帮助了我:

    XML_List = []
    XML_Structure_All = pd.DataFrame()
    for Tag_1 in XRoot[1]:
        for Child in Tag_1.iter():
        if len(Child.getparent().attrib) > 0:
            if 'CODE' in Child.getparent().attrib.keys():
            Parent = Child.getparent().attrib['CODE']
            elif 'C_CODE' in Child.getparent().attrib.keys():
            Parent = Child.getparent().attrib['C_CODE']
            elif 'KEY' in Child.getparent().attrib.keys():
            Parent = Child.getparent().attrib['KEY']
        else:
            Parent = ''
    
        if 'CODE' in Child.attrib.keys(): Col = 'CODE'
        elif 'C_CODE' in Child.attrib.keys(): Col = 'C_CODE'
        elif 'KEY' in Child.attrib.keys(): Col = 'KEY'
    
        XML_Dict = {'CODE': Child.attrib[Col], 'Parent': Parent}
        XML_List.append(XML_Dict)
    XML_Dimension_Parent = pd.DataFrame(XML_List)
    

    【讨论】:

      猜你喜欢
      • 2012-01-07
      • 1970-01-01
      • 2023-03-30
      • 2011-09-20
      • 2020-11-27
      • 1970-01-01
      • 2017-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多