Qextserialport ломает мой xml
Я пытаюсь переписать в C++ приложение, написанное на Python.
Все, что он делает, это открывает последовательный порт и читает некоторые XML. В Python я использовал pyserial для чтения XML и BeautifulSoup для получения информации. Выход был такой.
<file><property>xx32</property></file>
Теперь я использую qextserialport для чтения с последовательного порта, и xml, который я получаю, выглядит примерно так.
<
fil
e>
<prope
rty>xx32
</prop
erty>
</
file>
Моя проблема в том, что я не могу разобрать xml, как это. Я получаю ошибки.
РЕДАКТИРОВАТЬ:
Qextserialport читает данные из последовательного порта в виде набора байтов, которые не являются фиксированными. Так как мне объединить мой xml в одну строку? Я получаю строку XML каждые 4-5 секунд из последовательного порта.
вот мой код
this->port = new QextSerialPort(com_port,QextSerialPort::EventDriven);
port->setBaudRate(BAUD57600);
port->setFlowControl(FLOW_OFF);
port->setParity(PAR_NONE);
port->setDataBits(DATA_8);
port->setStopBits(STOP_1);
port->setTimeout(0);
if (port->open(QIODevice::ReadOnly) == true)
{
//qDebug()<< "hello";
connect(port,SIGNAL(readyRead()),this,SLOT(onReadyRead()));
}
и функция, которая на самом деле читает из последовательного порта
void CurrentCost::onReadyRead()
{
QByteArray bytes;
bytes = port->readAll();
//qDebug() << "bytes read:" << bytes.size();
//qDebug() << "bytes:" << bytes;
ui->textBrowser->append(bytes);
}
1 ответ
Я имею в виду что-то вроде этого:
class CurrentCost...{
private:
QByteArray xmlData;
private slots:
void onReadyRead();
};
void CurrentCost::onReadyRead()
{
xmlData.append(port->readAll());
if(xmlData.endsWith(/*what your port sending then xml is over&*/))
{
ui->textBrowser->append(xmlData);
xmlData.clear();
}
}