Как разобрать Hex в рамке XML, используя Python? - PullRequest
0 голосов
/ 04 мая 2020

Я получаю следующее сообщение xml (data_back в приведенном ниже коде) от хоста, которое мне нужно проанализировать для получения VersionRequest.

b'\x02
<H_VersionRequest>
<ClientId>Machine - 123</ClientId>
<VersionRequest>1.2.3</VersionRequest>
<H_VersionRequest>
\x03'

Я написал следующий код;

import xml.etree.ElementTree as ET
# data received from host is saved to data_back
xml = str(data_back)
tree = ET.fromstring(xml)
root = tree.getroot()
print(root)

Я получаю следующую ошибку:

Traceback (последний вызов был последним): файл "C: / Users / llovely / PycharmProjects / Test / Libraries / test4 msg in c .py", строка 10, в дереве = ET.fromstring (xml) Файл "C: \ Users \ llovely \ AppData \ Local \ Programs \ Python \ Python38-32 \ lib \ xml \ etree \ ElementTree.py", строка 1320 , в XML parser.feed (текст) xml .etree.ElementTree.ParseError: неправильно сформирован (неверный токен): строка 1, столбец 1

Может кто-нибудь предложить мне, как извлечь данные из этого формата xml?

1 Ответ

1 голос
/ 04 мая 2020

Если вы уверены, что за пределами XML и каждого конца есть только один байт, просто возьмите оставшуюся часть строки в качестве фрагмента:

import xml.etree.ElementTree as ET
# Decode from bytes to str, don;t call str on bytes
xml = data_back.decode()[1:-1]
tree = ET.fromstring(xml)
root = tree.getroot()
print(root)

Обратите внимание, что xml в вопрос не правильно сформулирован, но я предполагаю, что это опечатка.

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