Subversion Repositories HomeAutomation

Rev

Rev 969 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 969 Rev 997
Line 56... Line 56...
56
    if (xmlData.at(position) == '?' || xmlData.at(position) == '!' || xmlData.at(position) == '/')
56
    if (xmlData.at(position) == '?' || xmlData.at(position) == '!' || xmlData.at(position) == '/')
57
    {
57
    {
58
        return endPosition;
58
        return endPosition;
59
    }
59
    }
60
 
60
 
-
 
61
    string tagString;
-
 
62
 
-
 
63
    try
-
 
64
    {
61
    string tagString = xmlData.substr(position, endPosition-position);
65
        tagString = xmlData.substr(position, endPosition-position);
-
 
66
    }
-
 
67
    catch (std::out_of_range& e)
-
 
68
    {
-
 
69
        cout << "DEBUG: parseTag exception: " << e.what() << "\n";
-
 
70
        cout << "DEBUG: A xmlData=" << xmlData << " :: position=" << position << " :: endPosition=" << endPosition << endl;
-
 
71
    }
62
 
72
 
63
    tagString = trim(tagString);
73
    tagString = trim(tagString);
64
    tagString = trim(tagString, '\n');
74
    tagString = trim(tagString, '\n');
65
    tagString = trim(tagString);
75
    tagString = trim(tagString);
66
    tagString += " ";
76
    tagString += " ";
Line 83... Line 93...
83
                {
93
                {
84
                    myTagName = buffer;
94
                    myTagName = buffer;
85
                    buffer = "";
95
                    buffer = "";
86
                    //cout << "Found tag: " << myTagName << endl;
96
                    //cout << "Found tag: " << myTagName << endl;
87
                    foundTag = true;
97
                    foundTag = true;
88
                }
98
                }
89
                break;
99
                break;
90
 
100
 
91
            case '/':
101
            case '/':
92
                foundEnd = true;
102
                foundEnd = true;
93
                break;
103
                break;
94
 
104
 
95
            case '=':
105
            case '=':
96
                s = tagString.find('"', pos)+1;
106
                s = tagString.find('"', pos)+1;
97
                e = tagString.find('"', s);
107
                e = tagString.find('"', s);
98
 
108
 
-
 
109
                try
-
 
110
                {
99
                myAttributes[buffer] = tagString.substr(s, e-s);
111
                    myAttributes[buffer] = tagString.substr(s, e-s);
-
 
112
                }
-
 
113
                catch (std::out_of_range& ex)
-
 
114
                {
-
 
115
                    cout << "DEBUG: parseTag exception: " << ex.what() << "\n";
-
 
116
                    cout << "DEBUG: B tagString=" << tagString << " :: s=" << s << " :: e=" << e << endl;
-
 
117
                    continue;
-
 
118
                }
-
 
119
 
-
 
120
 
100
                //cout << "Found attribute: " << buffer << " = " << myAttributes[buffer] << endl;
121
                //cout << "Found attribute: " << buffer << " = " << myAttributes[buffer] << endl;
101
                pos = e;
122
                pos = e;
102
                buffer = "";
123
                buffer = "";
103
                break;
124
                break;
104
 
125
 
Line 123... Line 144...
123
                    if (xmlData.at(position+1) == '/')
144
                    if (xmlData.at(position+1) == '/')
124
                    {
145
                    {
125
                        position += 2;
146
                        position += 2;
126
                        endPosition = xmlData.find('>', position);
147
                        endPosition = xmlData.find('>', position);
127
 
148
 
128
                        if (myTagName.compare(xmlData.substr(position, endPosition-position)) == 0)
149
                        try
129
                        {
150
                        {
-
 
151
                            if (myTagName.compare(xmlData.substr(position, endPosition-position)) == 0)
-
 
152
                            {
130
                            //cout << "Found end tag: " << myTagName << endl;
153
                                //cout << "Found end tag: " << myTagName << endl;
131
                            return endPosition;
154
                                return endPosition;
-
 
155
                            }
-
 
156
                            else
-
 
157
                            {
-
 
158
                                throw new XmlException("Invalid end tag found. " + xmlData.substr(position, endPosition-position) + "::" + myTagName);
-
 
159
                            }
132
                        }
160
                        }
133
                        else
161
                        catch (std::out_of_range& e)
134
                        {
162
                        {
-
 
163
                            cout << "DEBUG: parseTag exception: " << e.what() << "\n";
135
                            throw new XmlException("Invalid end tag found. " + xmlData.substr(position, endPosition-position) + "::" + myTagName);
164
                            cout << "DEBUG: C xmlData=" << xmlData << " :: position=" << position << " :: endPosition=" << endPosition << endl;
-
 
165
                            continue;
136
                        }
166
                        }
-
 
167
 
-
 
168
                       
137
                    }
169
                    }
138
 
170
 
139
                    XmlNode subNode;
171
                    XmlNode subNode;
140
                    position = subNode.parseTag(xmlData, position);
172
                    position = subNode.parseTag(xmlData, position);
141
                    myChildren.push_back(subNode);
173
                    myChildren.push_back(subNode);