@@ -46,35 +46,52 @@ void CXMLImpl::DeleteXML(CXMLFile* pFile)
4646
4747CXMLNode* CXMLImpl::ParseString (const char * strXmlContent)
4848{
49- TiXmlElement *xmlRoot;
50- TiXmlNode *xmlChild;
51- CXMLNodeImpl *xmlRootNode;
52- CXMLNode *xmlChildNode;
53-
49+ TiXmlElement *xmlDocumentRoot;
50+ CXMLNodeImpl *xmlBaseNode;
51+ CXMLNode *xmlRootNode;
52+
5453 TiXmlDocument* xmlDoc = new TiXmlDocument ();
5554
5655 if (xmlDoc)
57- {
58- xmlDoc->Parse (strXmlContent, 0 , TIXML_ENCODING_UTF8);
56+ {
57+ if (xmlDoc->Parse (strXmlContent, 0 , TIXML_ENCODING_UTF8))
58+ {
59+ xmlDocumentRoot = xmlDoc->RootElement ();
5960
60- xmlRoot = xmlDoc-> RootElement ( );
61+ xmlBaseNode = new CXMLNodeImpl ( NULL , NULL , *xmlDocumentRoot );
6162
62- xmlRootNode = new CXMLNodeImpl ( NULL , NULL , *xmlRoot );
63+ xmlRootNode = CXMLImpl::BuildNode (xmlBaseNode, xmlDocumentRoot );
6364
64- xmlChild = 0 ;
65- while (xmlChild = xmlRoot->IterateChildren (xmlChild))
66- {
67- xmlChildNode = new CXMLNodeImpl (NULL , xmlRootNode, *xmlChild->ToElement ());
65+ return xmlRootNode;
6866 }
69-
70- return xmlRootNode ;
67+ else
68+ return NULL ;
7169 }
7270 else
7371 {
7472 return NULL ;
7573 }
7674}
7775
76+ CXMLNode* CXMLImpl::BuildNode (CXMLNodeImpl* xmlParent, TiXmlNode* xmlNode)
77+ {
78+ TiXmlNode *xmlChild;
79+ TiXmlElement *xmlChildElement;
80+ CXMLNodeImpl *xmlChildNode;
81+
82+ xmlChild = 0 ;
83+ while (xmlChild = xmlNode->IterateChildren (xmlChild))
84+ {
85+ xmlChildElement = xmlChild->ToElement ();
86+
87+ xmlChildNode = new CXMLNodeImpl (NULL , xmlParent, *xmlChildElement);
88+
89+ CXMLImpl::BuildNode (xmlChildNode, xmlChildElement);
90+ }
91+
92+ return xmlParent;
93+ }
94+
7895CXMLNode* CXMLImpl::CreateDummyNode ()
7996{
8097 CXMLNode* xmlNode = new CXMLNodeImpl (NULL , NULL , *new TiXmlElement (" dummy_storage" ));
0 commit comments