Форум программистов, компьютерный форум, киберфорум
Наши страницы

Qt

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

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

04.01.2017, 13:43. Просмотров 183. Ответов 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>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.01.2017, 13:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поиск одинаковых имен в XML документе (C++ Qt):

Работа в Qt с XML файлами имеющими пространства имен - C++ Qt
Имеется простейший XML файл: &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;Example xmlns=&quot;ab&quot; xmlns:ns1=&quot;abc&quot; xmlns:ns2=&quot;abcd&quot;&gt; &lt;Nod1&gt; ...

Поиск и чтение определенного тега в xml - C++ Qt
У меня есть вот такое xml документ: &lt;?xml version = &quot;1.0&quot;?&gt; &lt;DataBase_Test&gt; &lt;Maths&gt; &lt;Card number = &quot;1&quot;&gt; ...

Поиск по id в XML документе - C#
Помогите организовать поиск в данной программе

Поиск элемента (узла) в XML документе - C#
Всем привет. Нужно сделать: Поиск указанного пользователем елемента (узла) в XML документе (с помощью XPath-выражения). Как это сделать?...

Поиск последнего дочернего элемента и добавление следующего в xml-документе - C#
По наработкам: для всех элементов item вставить schema, если последний из дочерних элементов item-a = title. Xml вида: &lt;?xml...

.NET 4.x Как добавить данные в xml-файл, используя пространство имен System.Xml.Linq - Visual Basic .NET
Допустим, есть файл xml, я его взял из этого треда: http://www.cyberforum.ru/vb-net/thread335207.html &lt;?xml version=&quot;1.0&quot;...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.01.2017, 13:43
Привет! Вот еще темы с ответами:

Использование одинаковых имен при наследовании - C#
Здравствуйте, имеется 2 класса: базисный MainStructure и дочерний Entity&lt;T&gt; Проблема в следующем: public class MainStructure { ...

Использование одинаковых имен значений во вложенных функциях - F#
Добрый день, подскажите пожалуйста, в чем заключаются особенности областей действия имен в F#? Прошу привести пример и объяснить...

Символ & в XML-документе (RSS) - PHP
Подскажите,пожалуйста...Я написал небольшой редактор для генерации RSS-файлов,и есть в RSS тег &lt;link&gt;.И некоторые ссылки,которые вводит...

изменить данные XML документе - Delphi
задали мне вот такую задачку в XML файле нужно удалить лишние цифры в телефонных номерах - чтобы номер начанался с 0 к примеру...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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