Как разобрать xml файл с</pair> формат - PullRequest
0 голосов
/ 17 октября 2019

Я надеюсь проанализировать файл .xml, используя python. Формат файла следующий:

<root><dm_log_packet>
    <pair key ="type_id">LTE_PHY_Serv_Cell_Measurement</pair>
  </dm_log_packet>
</root>

Я попытался проанализировать его с помощью ElementTree, но не смог.

Вот мой код:

from xml.etree import ElementTree

class Log:
    def __init__(self,type_id=None):
        self.type_id=type_id
    def __str__(self):
        return self.type_id

roota=ElementTree.parse("file.xml")
log_file = roota.findall("dm_log_packet")

lo = []
for aa in log_file:
    log = Log()
    log.type_id = aa.find("type_id").text
    lo.append(log)

Я ожидаюанализировать каждую пару, но он не может сделать это, как у меня есть <type_id>...</type_id> пара.

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

.find() и .findall() ожидают XPath в качестве аргументов, простые строки типа "dm_log_packet" ничего не найдут.

from xml.etree import ElementTree

class Log:
    def __init__(self, type_id=None):
        self.type_id=type_id

    def __str__(self):
        return self.type_id

tree = ElementTree.parse("file.xml")
lo = []

for dm_log_packet in tree.findall(".//dm_log_packet"):
    pair = dm_log_packet.find("./pair/[@key='type_id']")
    if pair is not None:
        lo.append(Log(pair.text))

Обратите внимание, что dm_log_packet.find("./pair/[@key='type_id']") вернет None, когда нет <pair key="type_id">, следовательно, дополнительная проверка.

0 голосов
/ 17 октября 2019

Вы можете использовать BeautifulSoup

xml = """
  <root>
     <dm_log_packet>
         <pair key ="type_id">LTE_PHY_Serv_Cell_Measurement</pair>
    </dm_log_packet>
  </root>
  """

soup_obj = BeautifulSoup(xml)
soup_obj.html.body.foo.bar.findAll('type')[0]['foobar']

Выход будет

'1'

Подробнее ОписательныйОтвет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...