crossplatform.ru

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

QMainWindow
  опции профиля:
сообщение 29.7.2011, 17:41
Сообщение #1


Участник
**

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

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




Репутация:   0  


Привет!
Вопрос в сабже. В начале сделал, как в примерах показано (DOM BookMarks) - открытие файла; проверка, является ли файл xml'евским с нужной версией. А как дальше делать, чтобы он распознавал тэги? В QtXml столько классов... QDomDocument вроде ясно зачем. А Node, Element и тд - куда они?

PS Туториал есть по этому?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
RazrFalcon
  опции профиля:
сообщение 29.7.2011, 20:51
Сообщение #2


Zombie Mod
*****

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

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




Репутация:   212  


Раскрывающийся текст
#include <QtCore/QCoreApplication>
#include <QtXml>
#include <QtDebug>

void getChilds(QDomNode node);

QDomDocument inputDom;

int main()
{
  // этот кусок открывает и загружает файл
  // путь к вашему svg
  //QFile *inputFile = new QFile("/media/data/Additional/Programing/svg_optimizer_cli/Kanbaru.svg");
  QFile *inputFile = new QFile("/media/data/Additional/Programing/svg_optimizer_cli/temp.xml");
  inputFile->open(QFile::ReadOnly);
  QTextStream *textStream = new QTextStream(inputFile);
  QString inputString = textStream->readAll();
  inputDom.setContent(inputString);

  // получаем список всех корневых узлов
  QDomNodeList nodeList = inputDom.childNodes();
  for (int i = 0; i<nodeList.count(); ++i) {

    // удаляем Processing Instruction
    // aka <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    if (nodeList.at(i).isProcessingInstruction())
      inputDom.removeChild(nodeList.at(i));

    // удаляем любые коменты
    if (nodeList.at(i).isComment())
      inputDom.removeChild(nodeList.at(i));

    // если у узла есть наследники, просматриваем их все
    if (nodeList.at(i).hasChildNodes())
      getChilds(nodeList.at(i));
  }

  // поиск узлов по названию
  QDomNodeList nodeList2 = inputDom.elementsByTagName("path");
  for (int i = 0; i<nodeList2.count(); ++i) {
    //
    //qDebug()<<nodeList2.at(i).toElement().attribute("style");
    //nodeList2.at(i).toElement().removeAttribute("style");
  }

  // выводим все что осталось
  qDebug()<<inputDom.toString();

  return 0;
}

// рекурсивно просматриваем все узлы
// и удаляем коменты, где бы они не находились
void getChilds(QDomNode node)
{
  if (node.hasChildNodes()) {
    QDomNodeList tempNodeList = node.childNodes();
    for (int i = 0; i<tempNodeList.count(); ++i) {
      // удаляем любые коменты
      if (tempNodeList.at(i).isComment()) {
        node.removeChild(tempNodeList.at(i));
      } else if (tempNodeList.at(i).hasChildNodes()) {
        // если у текущего узла есть наслденики, просматриваем их
        getChilds(tempNodeList.at(i));
      }
    }
  }
}

Как то так.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 10.4.2025, 11:04