Как получить атрибуты родительского тега для lxml.etree, такие как «KEY», «NAME», Python 3.6 - PullRequest
1 голос
/ 09 мая 2019

Я хочу найти Родителя для тега 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())) 

Ответы [ 2 ]

1 голос
/ 10 мая 2019

Этот код должен получить несколько списков кортежей с парами ключ / значение:

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

Пример вывода:

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

Затем вы можете добавить их в кадр данных или любой другой.

0 голосов
/ 10 мая 2019

Ниже код помог мне:

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)
...