Есть некоторый протокол, который передаёт сообщения в формате xml а-ля:
XML
<?xml version='1.0' encoding='utf-8'?>
<ping />
Получаю QDomDocument используя
bool QDomDocument::setContent(const QString & text, bool namespaceProcessing, QString * errorMsg = 0, int * errorLine = 0, int * errorColumn = 0).
Всё бы ничего, но транспортный протокол TCP соответственно сообщения может нарезать на кусочки лил склеивать.
С нарезанием ещё как-то справиться можно - если произошла ошибка, значит возможно ещё не целиком пришло сообщение и надо ещё подождать.
А если наоборот произошло склеивание а-ля:
XML
<?xml version='1.0' encoding='utf-8'?>
<message id="1" />
<?xml version='1.0' encoding='utf-8'?>
<message id="2" />
Такой xml не распарсится, так как
«<?xml version='1.0' encoding='utf-8'?>» может быть только вначале.
Есть вариант, конечно, резать самому.
В простом варианте просто искать
<?xml и там где оно встретилось - новое сообщение.
В большинстве случаев оно сработает за исключением извращений типа:
XML
<?xml version='1.0' encoding='utf-8'?>
<text>
Processing instruction: <![CDATA[<?xml version='1.0' encoding='utf-8'?>]]>
</text>
Если пытаться таких штук избегать - считай полноценный парсинг Xml делать надо - чего б совсем не хотелось бы.
Соответственно вопрос -
есть ли какие-то классы в Qt для парсинга потока Xml документов?