crossplatform.ru

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

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> Получить QDomNode из xml по имени
RazrFalcon
  опции профиля:
сообщение 3.10.2011, 13:22
Сообщение #11


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Оно создает 2-а GuiInfo::findNode, и ретурн убивает первый (дочерний), а второй (главный) возвращает QDomNode().
То есть функция успевает зайти сама в себя и убивается не вся, а только дочерня ее часть.

По этому я создал эту тему, так же было и до этого.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 3.10.2011, 13:38
Сообщение #12


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


made in the Notepad ))

попробуй

//рекурсивный поиск
bool GuiInfo::findNode(const QString &name, const QDomNode &node, const QDomNode& found)
{
    if(node.nodeName()==name)
    {
      found = node;
      return true;
    }

  if(node.hasChildNodes())
  {
    QDomNodeList tempNodeList = node.childNodes();
    for(int i = 0; i<tempNodeList.count(); i++)
    {
      if(findNode(name,tempNodeList.item(i),found))return true;
    }
  }

  return false;
}

//ищем
GuiInfo::F1()
{
  node=...;
  QDomNode found;
  if(findNode("aaaa", node, found))
  {
    //нашли - found
  }
}


Сообщение отредактировал Алексей1153 - 3.10.2011, 13:38
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 3.10.2011, 13:55
Сообщение #13


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Рабочий вариант:
//ищем
GuiInfo::F1()
{
QDomNode node;
if (findNode("name",mainNode,node))
  qDebug()<<"find!";
}

bool GuiInfo::findNode(const QString &name, const QDomNode &node, QDomNode &fnode)
{
  if (node.hasChildNodes()) {
    QDomNodeList tempNodeList = node.childNodes();
    for (int i = 0; i<tempNodeList.count(); ++i) {
      if (tempNodeList.at(i).toElement().tagName().contains(name)) {
        fnode = tempNodeList.at(i);
        return true;
      }
      else if (tempNodeList.at(i).hasChildNodes()) {
        if(findNode(name,tempNodeList.item(i),fnode))
          return true;
      }
    }
  }

  return false;
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 3.10.2011, 14:05
Сообщение #14


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


RazrFalcon, в твоём варианте, в отличие от моего, если у искомого узла будут дети, то ты его не найдёшь
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 3.10.2011, 14:09
Сообщение #15


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


У меня все нашло. И с детьми и без.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 3.10.2011, 14:11
Сообщение #16


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


ну, нашлось, так нашлось.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DOGG
  опции профиля:
сообщение 3.10.2011, 17:03
Сообщение #17


Студент
*

Группа: Участник
Сообщений: 44
Регистрация: 9.8.2011
Из: Калининград
Пользователь №: 2798

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




Репутация:   0  


Может подойдет метод QDomNodeList QDomDocument::elementsByTagName ( const QString & tagname ) const?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 3.10.2011, 17:30
Сообщение #18


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Капец! Работает.
Сократил код в 100500 раз.
Спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DOGG
  опции профиля:
сообщение 3.10.2011, 17:46
Сообщение #19


Студент
*

Группа: Участник
Сообщений: 44
Регистрация: 9.8.2011
Из: Калининград
Пользователь №: 2798

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




Репутация:   0  


Пожалуйста! :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 28.11.2024, 2:23