Преобразование XML в CSV с использованием python pandas

#python #xml #pandas

#python #xml #панды #pandas

Вопрос:

Привет, я пытаюсь преобразовать свои xml-данные в фрейм данных pandas, но не могу проанализировать все данные. это XML-файл размером 13 мб.

Я хочу извлечь текст внутри «nodeName», я пробовал различные другие способы дерева элементов, но потерпел неудачу. Ниже мой XML выглядит следующим образом:

 <?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <Ib440ConfigGetResponse xmlns="http://Airspan.Netspan.WebServices">
            <Ib440ConfigGetResult>
                <ErrorCode>OK</ErrorCode>
                <NodeResult>
                    <NodeResultCode>OK</NodeResultCode>
                    <NodeName>INAPKVLIVGLRTW6001ENBIB5004</NodeName>
                    <Ib440Config>
                        <Name>INAPKVLIVGLRTW6001ENBIB5004</Name>
                        <Hardware>iBridge 440-221</Hardware>
                        <Description>I-AP-KVLI-ENB-6001</Description>
                        <ManagedMode>Managed</ManagedMode>
                        <Site>Kavali</Site>
                        <Region>Andhra Pradesh</Region>
                        <NbifEventAlarmForwarding>Enabled</NbifEventAlarmForwarding>
                        <ConfigMode>OptimizedModeC</ConfigMode>
                        <MediumAccessMethod>CSMA</MediumAccessMethod>
                        <WirelessProtocol>802.11n</WirelessProtocol>
                        <HtSupportedMcs>MCS0-15</HtSupportedMcs>
                        <VhtSupportedMcs>MCS0-7</VhtSupportedMcs>
                        <CellRadiusRange>Short</CellRadiusRange>
                        <GuardInterval>Long</GuardInterval>
                        <Frequency>5850</Frequency>
  

Ниже приведен небольшой код, который я пробую, но он показывает только 4 строки.

 import pandas_read_xml as pdx
import pandas as pd
df = pdx.read_xml('1111s.xml')
df
  

результат, который я получаю от
введите описание изображения здесь

Ответ №1:

Я бы BeautifulSoup попробовал.

Вы могли бы прочитать xml-файл как объект bs4, а затем использовать методы bs4 для получения необходимых вам атрибутов (и преобразовать результат во фрейм данных).

 from bs4 import BeautifulSoup


with open("1111s.xml", "r") as f:
    xml_data = f.read()

soup = BeautifulSoup(xml_data, "xml")
soup.find("NodeName").get_text(strip=True)
# 'INAPKVLIVGLRTW6001ENBIB5004'


# in a loop
data = []
for element in soup.find("NodeName").find_next_siblings():
    data.append({
        "Name": element.find("Name").get_text(strip=True),
        "Hardware": element.find("Hardware").get_text(strip=True),
        "Site": element.find("Site").get_text(strip=True)
    })

pd.DataFrame(data)
    Name                        Hardware        Site
0   INAPKVLIVGLRTW6001ENBIB5004 iBridge 440-221 Kavali

  

Комментарии:

1. просто пример для начала

2. Спасибо, приятель, за вашу любезную поддержку 🙂

Ответ №2:

Просматривая XML, вам нужно будет составить список тегов, по которым вы хотите перемещаться, чтобы добраться до тега «root». Если мне нужно угадать, то:

 import pandas_read_xml as pdx

root_tag_list = ['soap:Envelope', 'soap:Body', 'Ib440ConfigGetResponse', 'Ib440ConfigGetResult', 'NodeResult', 'Ib440Config']

df = pdx.read_xml('1111s.xml', root_tag_list)

df
  

может сработать.

Комментарии:

1. я получаю эту ошибку, TypeError: индексы списка должны быть целыми числами или фрагментами, а не str