Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Перечисление элементов XML
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Обработка XML
balbes
Покопался в мануале, так и не понял, как перечислить XML элементы получить их свойста и текст. :(
archimed7592
// перечислить
QDomNodeList children = el.childNodes();
for (int i = 0; i < children.size(); ++i)
if (children.at(i).isElement())
{
    QDomElement childElement = children.at(i).toElement();
    // ...
}

// текст
QString text = el.text();

// свойства(по научному - атрибуты)
QString value = el.attribute("key", "defaultValue");
balbes
Ну вот, беру для пример html файл, тотже xml, пробую твой код, но получаю билеберду, не могу получить ни h1 ни таблицу... :(
ViGOur
А ты это пробуешь сделать рекурсивно или как?
Просто при вызове только этого кода ты получишь такие элементы как: head и body, может быть еще какие, которые стоят на одном уровне с ними.
archimed7592
Цитата(balbes @ 14.1.2008, 12:47) *
html файл, тотже xml
Not quite... Может попасться очень даже невалидная xml'ка. Скажу, даже, что чаще попадается невалидная :).
Цитата(balbes @ 14.1.2008, 12:47) *
пробую твой код, но получаю билеберду, не могу получить ни h1 ни таблицу... sad.gif
Код полностью покажи.
balbes
Так
    QString errorStr;
    int errorLine;
    int errorColumn;
    QDomDocument domDocument;

    QFile device( "test.html");
    device.open( QIODevice::ReadOnly);

    if (!domDocument.setContent( &device, true, &errorStr, &errorLine, &errorColumn))
    {
        QMessageBox::information( 0,
                                 QObject::tr("DOM test"),
                                 QObject::tr("Parse error at line %1, column %2:\n%3")
                                 .arg(errorLine)
                                 .arg(errorColumn)
                                 .arg(errorStr));
        return false;
    }

    QDomElement root = domDocument.documentElement();
    // перечислить
    QDomNodeList children = root.childNodes();
    for (int i = 0; i < children.size(); ++i)
    {
        if (children.at(i).isElement())
        {
            QDomElement childElement = children.at(i).toElement();

            QString tagName = childElement.tagName();
            QString text = childElement.text();
        }
    }
archimed7592
ViGOur, уже ответил: таким образом ты получишь только head и body. Хочешь глубже - нужно перечислять элементы внутри head/body и т.д. Можно сделать это рекурсивно(если приемлемо). Также, найти необходимый элемент можно по его атрибуту id(если он есть) - doc.getElementById("main_table").
balbes
archimed7592, ViGOur, понял, спасибо.
Добавил дополнительный цикл внутри и заработало. :)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.