Форум программистов, компьютерный форум CyberForum.ru

Qt

Войти
Регистрация
Восстановить пароль
 
AlexMoscow10
0 / 0 / 0
Регистрация: 16.12.2015
Сообщений: 39
#1

Поиск одинаковых имен в XML документе - C++ Qt

04.01.2017, 13:43. Просмотров 155. Ответов 0
Метки qt, xml (Все метки)

Как переделать программу, чтобы она искала одинаковые имена в XML документе без ввода первой буквы?
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include<QCoreApplication>
#include<QFile>
#include<QXmlStreamReader>
#include<QObject>
#include<QtXml/QXmlDefaultHandler>
#include<QDebug>
#include <QStringList>
#include <iostream>
#include <QDomDocument>
using namespace std;
 
class AddressBookParser : public QXmlDefaultHandler {
private:
    QString s;
    string n;
    bool b_print;
    QString m_strText;
    QString tagname;
    QDomDocument doc;
    QString mass1;
    QString mass;
public:
    bool startDocument(){
        b_print=false;
        cout<<"enter letter: ";
        cin>>n;
        mass1 ="<addressbook>";
        return true;
    }
 
    // —--------------------------------------------------------------—
    bool startElement(const QString&,
                      const QString&,
                      const QString& s_tagname,
                      const QXmlAttributes& attrs
                      )
    {
        if(s_tagname=="contact"){
            s=attrs.value("number");
        }
        tagname=s_tagname;
        return true;
    }
    // —--------------------------------------------------------------—
    bool characters(const QString& strText)
    {
        m_strText = strText;
        QString qn = QString::fromStdString(n); //перобразуем кодировку введенной буквы из Ascii в Unicode
        if(tagname=="name"){
            if(m_strText.left(1)==qn)
            {
                mass1+="<contact number = "
                       "'"+s+"'";
                mass1+=">";
                b_print=true;
                if(mass.contains(m_strText)){
                    qDebug()<<"There are same names in XML";
                    return 0;
                }
            }
 
            mass += m_strText;
            mass += " ";
        }
 
        return true;
    }
    // —--------------------------------------------------------------—
    bool endElement(const QString&, const QString&, const QString& str)
    {
        if (b_print ) {
            if(str=="contact"){
                mass1+="</contact>";
                b_print=false;
            }
            else {
                if(tagname == "phone"){
                    mass1+= "<name = "
                            "'"+m_strText+"'";
                    mass1+= ">";
                }
                if(tagname != "name"){
                mass1+="<"+str+"> "+ m_strText+" </"+str+">";
                } else   mass1+="<"+str+"> "+ m_strText+" </"+str+">";
 
 
                qDebug() << "TagName:" << str
                         << "\tText:" << m_strText;
            }
        }
        return true;
    }
    //-----------------------------------------------------------------—
    bool endDocument(){
        mass1 +="</addressbook>";
        doc.setContent(mass1);
        QStringList strlist =doc.toString(4).split("\n");
        for(int i=0;i<strlist.length()-1;i++){
            qDebug()<<strlist[i];
        }
        return true;
    }
    // —--------------------------------------------------------------—
    bool fatalError(const QXmlParseException& exception)
    {
        qDebug() << "Line:" << exception.lineNumber()
                 << ", Column:" << exception.columnNumber()
                 << ", Message:"<< exception.message();
        return false;
    }
};
int main()
{
    AddressBookParser handler;
    QFile file("E:/qt/task1/addressbook.xml");
    QXmlInputSource source(&file);
    QXmlSimpleReader reader;
    reader.setContentHandler(&handler);
    reader.parse(source);
 
    return 0;
}
Вот сам xml документ:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?xml version = "1.0"?>
<!-- My Address Book -->
<addressbook>
<contact number = "1">
<name>Piggy</name>
<phone>+49 631322187</phone>
<email>piggy@mega.de</email>
</contact>
<contact number = "2">
<name>Kermit</name>
<phone>+49 631322181</phone>
<email>kermit@mega.de</email>
</contact>
<contact number = "3">
<name>Gonzo</name>
<phone>+49 631322186</phone>
<email>gonzo@mega.de</email>
</contact>
<contact number = "4">
<name>Petya</name>
<phone>+49 631322188</phone>
<email>petya@mega.de</email>
</contact>
<contact number = "5">
<name>Kermit</name>
<phone>+49 631322189</phone>
<email>kermit2@mega.de</email>
</contact>
</addressbook>
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.01.2017, 13:43     Поиск одинаковых имен в XML документе
Посмотрите здесь:

C++ Qt enum - объявление перечисления в пространстве имен
C++ Qt Пространства имен в Qt
C++ Qt QT Server. Множество клиентов с разными именами. Как реализовать защиту от одинаковых имён
Поиск и чтение определенного тега в xml C++ Qt
QRegExp поиск всех строк которые соответствуют шаблону и поиск их длины C++ Qt
QtCreator подсказка имен C++ Qt
C++ Qt Qlist удаление одинаковых элементов в списках
C++ Qt Два одинаковых значения при сравнении дают false
Пространства имен в Qt C++ Qt
QTableWidget сравнение и удаление одинаковых ячеек C++ Qt
C++ Qt Как сохранить таблицу из модели QAbstractTableModel в документе openoffice?
C++ Qt Работа в Qt с XML файлами имеющими пространства имен

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru