среда, 29 октября 2008 г.

QtXml DOM создание некорректного документа

В Qt4 есть библиотека классов для работы с XML. И там есть набор классов для работы с DOM. Только что обнаружил там весьма неприятную фичу. Дело в том, что QDomDocument является наследником QDomNode и следовательно к нему можно добавлять любое количество child нод с помощью функции QDomNode::appendChild(). При этом добавлении не проверяется, валидности этой операции с точки зрения структуры XML документа и можно создать например такой документ:
 <!DOCTYPE MyDocType>  
 <root1>  
   <tag>text<tag>  
 </root1>  
 <root2>  
   <tag>text<tag>  
 </root2>  

В котором содержится более чем один корневой элемент.
Что примечательно, если попытаться распарсить такой XML с помощью функции QDomDocument::setContent(), то будет выданна ошибка.
Как будет время покопаюсь в багрепортах и списках рассылки Qt4. Я эту фичу обнаружил в Qt 4.4.