Ik heb een probleem met een kleine XML parser genaamd TinyXML. Ik heb het volgende XML bestand:
En de volgende (verkorte) code:
De output hiervan is het volgende:
Wat ik dus niet begrijp, is dat 'test' niet werkt.
Ik heb van de tutorial, bij "Decoding state from XML" de relevante delen gebruikt. Zoals erboven te zien is, lijkt hun XML bestand ook vrij overeenkomstig te zijn met de mijne. In de tutorial is ook te zien dat ze
gebruiken ipv FirstChildElement(), (welke ik ook heb geprobeerd) maar in de documentatie staat dat de een pointer naar een Node returned, en de ander een pointer naar een Element, welke een subclass is van Node, dus heel veel maakt dat niet uit, aangezien hij later alsnog omgezet wordt in een Element.
Omdat ik het maar een vreemd probleem vind, heb ik uit de documentatie ook de "print_to_stdout" functie gebruikt, en bij het parsen hield hij inderdaad op na het volgende geprint te hebben:
Het lijkt er dus op of de parser niet verder wil traversen, maar ik snap er echt helemaal niks meer van.
Typefouten voorbehouden, m'n toetsenbord wil nog wel eens zomaar extra characters typen..
XML:
1
2
3
4
5
6
7
8
9
| <?xml version="1.0" encoding="UTF-8" ?> <configuration> <screen> <width>800</width> <height>600</height> <bpp>32</bpp> </screen> </configuration> |
En de volgende (verkorte) code:
C++:
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
| void readConfig(TiXmlDocument* doc) { TiXmlHandle docHandle(doc); TiXmlHandle hRoot(0); TiXmlElement* pElem; pElem = docHandle.FirstChildElement().Element(); if (pElem) { TiXmlElement* test; hRoot = TiXmlHandle(pElem); printf("Value van pElem is: %s, en GetText is:%s\n", pElem->Value(), pElem->GetText()); printf("Value van hRoot is: %s, en GetText is:%s\n", (hRoot.ToElement())->Value(), (hRoot.ToElement())->GetText()); test = hRoot.FirstChildElement().Element(); if (test) { printf("Value van test is: %s, en GetText is:%s\n", test->Value(), test->GetText()); } } } int main() { const char* fullPath = "bla.xml"; TiXmlDocument doc(fullPath); if (doc.LoadFile()) { readConfig(&doc); } return 0; } |
De output hiervan is het volgende:
code:
1
2
| Value van pElem is: configuration, en GetText is:(null) Value van hRoot is: configuration, en GetText is:(null) |
Wat ik dus niet begrijp, is dat 'test' niet werkt.
Ik heb van de tutorial, bij "Decoding state from XML" de relevante delen gebruikt. Zoals erboven te zien is, lijkt hun XML bestand ook vrij overeenkomstig te zijn met de mijne. In de tutorial is ook te zien dat ze
C++:
1
| pElem = hRoot.FirstChild() .... |
gebruiken ipv FirstChildElement(), (welke ik ook heb geprobeerd) maar in de documentatie staat dat de een pointer naar een Node returned, en de ander een pointer naar een Element, welke een subclass is van Node, dus heel veel maakt dat niet uit, aangezien hij later alsnog omgezet wordt in een Element.
Omdat ik het maar een vreemd probleem vind, heb ik uit de documentatie ook de "print_to_stdout" functie gebruikt, en bij het parsen hield hij inderdaad op na het volgende geprint te hebben:
code:
1
2
3
| DOCUMENT + DECLARATION + ELEMENT configuration |
Het lijkt er dus op of de parser niet verder wil traversen, maar ik snap er echt helemaal niks meer van.
Typefouten voorbehouden, m'n toetsenbord wil nog wel eens zomaar extra characters typen..
wil een Toyota Supra mkIV!!!!! | wil een Yamaha YZF-R{1,6} | wil stiekem ook een Ducati
"Security is just a state of mind"
PSN: scorpie | Diablo 3: scorpie#2470