Rev 969 | Show entire file | Regard 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 |
|
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 122... | Line 143... | ||
| 122 | case '<': |
143 | case '<': |
| 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 | ||
| - | 149 | try |
|
| - | 150 | { |
|
| 128 | if (myTagName.compare(xmlData.substr(position, endPosition-position)) == 0) |
151 | if (myTagName.compare(xmlData.substr(position, endPosition-position)) == 0) |
| 129 | { |
152 | { |
| 130 | //cout << "Found end tag: " << myTagName << endl; |
153 | //cout << "Found end tag: " << myTagName << endl; |
| 131 | return endPosition; |
154 | return endPosition; |
| 132 | } |
155 | } |
| 133 | else |
156 | else |
| 134 | { |
157 | { |
| 135 | throw new XmlException("Invalid end tag found. " + xmlData.substr(position, endPosition-position) + "::" + myTagName); |
158 | throw new XmlException("Invalid end tag found. " + xmlData.substr(position, endPosition-position) + "::" + myTagName); |
| 136 | } |
159 | } |
| - | 160 | } |
|
| - | 161 | catch (std::out_of_range& e) |
|
| - | 162 | { |
|
| - | 163 | cout << "DEBUG: parseTag exception: " << e.what() << "\n"; |
|
| - | 164 | cout << "DEBUG: C xmlData=" << xmlData << " :: position=" << position << " :: endPosition=" << endPosition << endl; |
|
| - | 165 | continue; |
|
| - | 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); |