Показать часть файла XML во время анализа

Рассмотрим следующий XML-файл:

<cookbook>
<recipe xml:id="MushroomSoup">
    <title>Quick and Easy Mushroom Soup</title>
    <ingredient name="Fresh mushrooms"
                quantity="7"
                unit="pieces"/>
    <ingredient name="Garlic"
                quantity="1"
                unit="cloves"/>
</recipe>
<recipe xml:id="AnotherRecipe">
    <title>XXXXXXX</title>
    <ingredient name="Tomatoes"
                quantity="8"
                unit="pieces"/>
    <ingredient name="PineApples"
                quantity="2"
                unit="cloves"/>
</recipe>
</cookbook>

Допустим, я хочу проанализировать этот файл и собрать каждый рецепт как XML, каждый как отдельную строку QString.

Например, я хотел бы иметь QString, которая содержит:

<recipe xml:id="MushroomSoup">
    <title>Quick and Easy Mushroom Soup</title>
    <ingredient name="Fresh mushrooms"
                quantity="7"
                unit="pieces"/>
    <ingredient name="Garlic"
                quantity="1"
                unit="cloves"/>
</recipe>

Как я мог это сделать? Ребята, вы знаете, быстрый и чистый метод для этого?

Заранее спасибо за помощь!

2 ответа

Решение

Каждый QDomNode имеет

void QDomNode::save ( QTextStream & str, int indent) const

метод, и QTextStream имеет

QString * string () const

Итак, вы просто используете эти методы и получаете простой код с гибкой кодовой страницей (гибкий QDomNode и QTextStream).

Вы можете перебирать элементы с определенным именем, используя firstChildElement(name)/nextSiblingElement(name), или вы можете получить корневой элемент рецептов и писать foreach(узел QDomNode, root.childNodes()) или smth. Есть много способов прецессировать Xml в Qt. Посмотрите на учебники, предоставленные троллями.

Qt поддерживает и SAX, и DOM. Просто напишите запрос. Вот учебник.

Другие вопросы по тегам