【问题标题】:How to find Parent Node for Nested Element XML Tag, Python 3.6如何查找嵌套元素 XML 标记的父节点,Python 3.6
【发布时间】:2019-05-10 13:52:47
【问题描述】:

我收到了来自http://dataportal.ins.tn/en/API 的以下 XML 响应

https://www.dropbox.com/s/8x6tpbpd6m8j1f9/DimensionElements_response_2019-05-09_11-46.xml?dl=0

我使用以下代码转换为 Dataframe:

import requests
import xml.etree.ElementTree as ET
import pandas as pd

Dimension_Id = 'OBJ5263019'
Language = '1033'

Request_URL = 'http://dataportal.ins.tn/WebApi/GetDimensionElements'
Method_Post_Body = "<QueryMessage lcid='" + Language + "'> <DataWhere> <DimensionId>" + Dimension_Id + "</DimensionId> </DataWhere> </QueryMessage>"

Post_Response = requests.post(Request_URL, data=Method_Post_Body, headers={'Content-type': 'text/xml'})
XTree = Post_Response.content
XRoot = ET.XML(XTree)

XML_List = []
XML_Structure_All = pd.DataFrame()
for Tag_1 in XRoot[1]:
    for Child in Tag_1.iter():
    XML_Dict = Child.attrib
    XML_List.append(XML_Dict)

XML_Dimension_Items = pd.DataFrame(XML_List)

我想为每个元素生成父元素,想将“元素”属性“键”视为父元素。

在上面的例子中:

第一个元素没有父元素,所以我想保留 "Parent" = ''

第二个元素 (KEY="27932019") 有多个子元素,因此 KEY="27932019" 将是子元素的父代码,这应该适用于所有嵌套元素。

有没有办法做到这一点?

【问题讨论】:

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


    【解决方案1】:

    我们可以从 lxml 获取父级:

    import pandas as pd
    import requests
    from lxml import etree
    from io import StringIO, BytesIO
    
    Dimension_Id = 'RDS_DICT_REGIONS_NSO'
    Language = '1033'
    
    Request_URL = 'http://dataportal.ins.tn/WebApi/GetDimensionElements'
    Method_Post_Body = "<QueryMessage lcid='" + Language + "'> <DataWhere> <DimensionId>" + Dimension_Id + "</DimensionId> </DataWhere> </QueryMessage>"
    
    Post_Response = requests.post(Request_URL, data=Method_Post_Body, headers={'Content-type': 'text/xml'})
    
    XRoot_P = etree.fromstring(Post_Response.content)
    
    XML_List = []
    XML_Structure_All = pd.DataFrame()
    for Tag_1 in XRoot_P[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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 2019-06-20
      • 2020-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多