crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Перечисление элементов XML
balbes
  опции профиля:
сообщение 14.1.2008, 12:22
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 62
Регистрация: 11.10.2007
Пользователь №: 10

Спасибо сказали: 0 раз(а)




Репутация:   0  


Покопался в мануале, так и не понял, как перечислить XML элементы получить их свойста и текст. :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
archimed7592
  опции профиля:
сообщение 14.1.2008, 12:30
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 27.12.2007
Из: Moscow
Пользователь №: 56

Спасибо сказали: 0 раз(а)




Репутация:   0  


// перечислить
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");


Сообщение отредактировал archimed7592 - 14.1.2008, 12:31
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
balbes
  опции профиля:
сообщение 14.1.2008, 12:47
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 62
Регистрация: 11.10.2007
Пользователь №: 10

Спасибо сказали: 0 раз(а)




Репутация:   0  


Ну вот, беру для пример html файл, тотже xml, пробую твой код, но получаю билеберду, не могу получить ни h1 ни таблицу... :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 14.1.2008, 13:22
Сообщение #4


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


А ты это пробуешь сделать рекурсивно или как?
Просто при вызове только этого кода ты получишь такие элементы как: head и body, может быть еще какие, которые стоят на одном уровне с ними.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
archimed7592
  опции профиля:
сообщение 14.1.2008, 13:27
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 27.12.2007
Из: Moscow
Пользователь №: 56

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(balbes @ 14.1.2008, 12:47) *
html файл, тотже xml
Not quite... Может попасться очень даже невалидная xml'ка. Скажу, даже, что чаще попадается невалидная :).
Цитата(balbes @ 14.1.2008, 12:47) *
пробую твой код, но получаю билеберду, не могу получить ни h1 ни таблицу... sad.gif
Код полностью покажи.

Сообщение отредактировал archimed7592 - 14.1.2008, 13:29
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
balbes
  опции профиля:
сообщение 14.1.2008, 14:04
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 62
Регистрация: 11.10.2007
Пользователь №: 10

Спасибо сказали: 0 раз(а)




Репутация:   0  


Так
    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();
        }
    }


Сообщение отредактировал balbes - 14.1.2008, 14:04
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
archimed7592
  опции профиля:
сообщение 14.1.2008, 14:19
Сообщение #7


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 27.12.2007
Из: Moscow
Пользователь №: 56

Спасибо сказали: 0 раз(а)




Репутация:   0  


ViGOur, уже ответил: таким образом ты получишь только head и body. Хочешь глубже - нужно перечислять элементы внутри head/body и т.д. Можно сделать это рекурсивно(если приемлемо). Также, найти необходимый элемент можно по его атрибуту id(если он есть) - doc.getElementById("main_table").
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
balbes
  опции профиля:
сообщение 14.1.2008, 14:35
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 62
Регистрация: 11.10.2007
Пользователь №: 10

Спасибо сказали: 0 раз(а)




Репутация:   0  


archimed7592, ViGOur, понял, спасибо.
Добавил дополнительный цикл внутри и заработало. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 11.12.2024, 16:18