-
Notifications
You must be signed in to change notification settings - Fork 0
/
ParaseXML.cpp
executable file
·127 lines (95 loc) · 2.37 KB
/
ParaseXML.cpp
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
123
124
125
126
127
#include "ParaseXML.h"
#include <errno.h>
#include "tinyxml/tinyxml.h"
#include "xmlproc.h"
void ParaseTinyAttribute2(TiXmlNode* pchild, HUMap & xmlmp)
{
TiXmlAttribute* attr = pchild->ToElement()->FirstAttribute();
if (attr)
{
TiXmlNode* node = pchild;
while (node)
{
while (attr)
{
xmlmp[attr->Name()] = attr->Value();
attr = attr->Next();
}
node = node->NextSiblingElement();
}
}
}
void ParaseUpdateXml2(TiXmlNode* pParent, HUMap & xmlmp)
{
if (pParent == NULL)
{
return;
}
TiXmlNode* pchild = pParent->FirstChild();
while (pchild)
{
int t = pchild->Type();
if (t == TiXmlNode::TINYXML_COMMENT)
{
pchild = pchild->NextSibling();
continue;
}
HUMap &mp = xmlmp.CreateMultiLast(pchild->Value());
ParaseTinyAttribute2(pchild, mp);
if (pchild->FirstChild() != NULL && pchild->FirstChild()->Type() == TiXmlNode::TINYXML_TEXT)
{
mp.m_val = pchild->FirstChild()->Value();
}
if (pchild->FirstChild() == NULL || pchild->FirstChild()->Type() == TiXmlNode::TINYXML_ELEMENT)
{
ParaseUpdateXml2(pchild, mp);
}
pchild = pchild->NextSibling();
}
}
int ParseXMLElement2(hustr name, HUMap & xmlmp, xmlproc * xml);
void ParaseUpdateXml3(TiXmlNode* pParent, xmlproc * xml)
{
if (pParent == NULL)
{
return;
}
TiXmlNode* pchild = pParent->FirstChild();
while (pchild)
{
int t = pchild->Type();
if (t == TiXmlNode::TINYXML_COMMENT)
{
pchild = pchild->NextSibling();
continue;
}
const char * name = pchild->Value();
HUMap mp(name);
ParaseTinyAttribute2(pchild, mp);
if (pchild->FirstChild() != NULL && pchild->FirstChild()->Type() == TiXmlNode::TINYXML_TEXT)
{
mp.m_val = pchild->FirstChild()->Value();
}
if (pchild->FirstChild() == NULL || pchild->FirstChild()->Type() == TiXmlNode::TINYXML_ELEMENT)
{
ParaseUpdateXml2(pchild, mp);
}
ParseXMLElement2(name, mp, xml);
pchild = pchild->NextSibling();
}
}
void ParaseTinyXmlFile(const char * file, xmlproc * xml)
{
TiXmlDocument doc;
if (!doc.LoadFile(file))
{
errexitf("ParaseTinyXmlFile LoadFile %s %s \r\n TiXmlDocument error :%s\r\n", xml->filename.c_str(), strerror(errno),
doc.ErrorDesc());
}
TiXmlElement * root = doc.RootElement();
if (!root)
{
return;
}
ParaseUpdateXml3(root, xml);
}