将CMarkup.cpp和CMarkup.h导入到我们的工程中就可以了。编译可能会出现问题,解决的方法是在CMarkup.cpp的开头加上#include <stdafx.h>,或者关闭预编译也可以。
1、创建一个XML文档
对于创建一个XML文档,需要实例化一个CMarkup对象,并调用AddElem创建根元素。在这个位置,如果你调用 AddElem("School") ,文档会简单的装一个空元素<School/>. 然后调用AddChildElem 在根元素的下面创建元素。
1
CMarkup xml;
2
xml.SetDoc(
"
<?xml version=/
"
1.0
/
"
encoding=/
"
UTF
-
8
/
"
?>/r/n
"
);
3
xml.AddElem(
"
School
"
);
4
xml.IntoElem();
5
xml.AddElem(
"
Department
"
,
"
Automation
"
);
6
xml.AddElem(
"
Department
"
,
"
Computer
"
);
7
xml.AddElem(
"
Department
"
,
"
Math
"
);
8
xml.AddElem(
"
Department
"
,
"
English
"
);
9
xml.OutOfElem();
10
xml.Save(
"
School.xml
"
);
效果如下:
1
<?
xml version="1.0" encoding="UTF-8"
?>
2
<
School
>
3
<
Department
>
Automation
</
Department
>
4
<
Department
>
Computer
</
Department
>
5
<
Department
>
Math
</
Department
>
6
<
Department
>
English
</
Department
>
7
</
School
>
8
2、浏览特定元素
4、添加
4、1 添加在最后面(用AddElem)
1
CMarkup xml;
2
BOOL bLoadXml
=
FALSE;
3
bLoadXml
=
xml.Load(
"
School.xml
"
);
4
if
(bLoadXml)
5
{
6
xml.ResetMainPos();
7
xml.FindElem();
8
xml.IntoElem();
9
xml.AddElem(
"
Department
"
,
"
SiQinghua
"
);
10
xml.OutOfElem();
11
xml.Save(
"
School.xml
"
);
12
}
效果如下:
1
<?
xml version="1.0" encoding="UTF-8"
?>
2
<
School
>
3
<
Department
>
Automation
</
Department
>
4
<
Department
>
Computer
</
Department
>
5
<
Department
>
Math
</
Department
>
6
<
Department
>
Chinese
</
Department
>
7
<
Department
>
SiQinghua
</
Department
>
8
</
School
>
4、2 添加在最前面(用InsertElem)
1
CMarkup xml;
2
BOOL bLoadXml
=
FALSE;
3
bLoadXml
=
xml.Load(
"
School.xml
"
);
4
if
(bLoadXml)
5
{
6
xml.ResetMainPos();
7
xml.FindElem();
8
xml.IntoElem();
9
xml.AddElem(
"
Department
"
,
"
SiQinghua
"
);
10
xml.OutOfElem();
11
xml.Save(
"
School.xml
"
);
12
}
效果如下:
1
<?
xml version="1.0" encoding="UTF-8"
?>
2
<
School
>
3
<
Department
>
NARI
</
Department
>
4
<
Department
>
Automation
</
Department
>
5
<
Department
>
Computer
</
Department
>
6
<
Department
>
Math
</
Department
>
7
<
Department
>
Chinese
</
Department
>
8
<
Department
>
SiQinghua
</
Department
>
9
</
School
>
10
5、删除
1
CMarkup xml;
2
BOOL bLoadXml
=
FALSE;
3
bLoadXml
=
xml.Load(
"
School.xml
"
);
4
if
(bLoadXml)
5
{
6
BOOL bFind
=
TRUE;
7
xml.ResetMainPos();
8
while
(bFind)
9
{
10
bFind
=
xml.FindChildElem(
"
Department
"
);
11
if
(bFind)
12
{
13
CString strData
=
_T(
""
);
14
strData
=
xml.GetChildData();
//
此时节点还是父节点
15
if
(
"
SiQinghua
"
==
strData)
16
{
17
xml.RemoveChildElem();
18
xml.Save(
"
School.xml
"
);
19
break
;
20
}
21
}
22
}
23
}
效果如下:
1
<?
xml version="1.0" encoding="UTF-8"
?>
2
<
School
>
3
<
Department
>
NARI
</
Department
>
4
<
Department
>
Automation
</
Department
>
5
<
Department
>
Computer
</
Department
>
6
<
Department
>
Math
</
Department
>
7
<
Department
>
Chinese
</
Department
>
8
</
School
>
9
上面的例子都是不带属性的,下面举一个带有属性的例子。
1、生成XML文档
1
CMarkup xml;
2
xml.SetDoc(
"
<?xml version=/
"
1.0
/
"
encoding=/
"
UTF
-
8
/
"
?>
"
);
3
xml.AddElem(
"
UserInfo
"
);
4
xml.IntoElem();
5
for
(
int
i
=
0
;i
<
10
;i
++
)
6
{
7
CString strID
=
_T(
""
);
8
CString strPwd
=
_T(
""
);
9
10
srand(UINT(time(NULL)
+
i));
//
产生一个随机数
11
int
nLevel
=
rand()
%
256
;
12
13
strID.Format(
"
UserID%02d
"
,i);
14
strPwd.Format(
"
UserPwd%02d
"
,i);
15
16
xml.AddElem(
"
User
"
);
17
xml.AddAttrib(
"
UserID
"
,strID);
18
xml.AddAttrib(
"
UserPwd
"
,strPwd);
19
xml.AddAttrib(
"
UserLevel
"
,nLevel);
20
}
21
xml.OutOfElem();
22
xml.Save(
"
UserInfo.xml
"
);
效果如下:
1
<?
xml version="1.0" encoding="UTF-8"
?>
2
<
UserInfo
>
3
<
User
UserID
="UserID00"
UserPwd
="UserPwd00"
UserLevel
="85"
/>
4
<
User
UserID
="UserID01"
UserPwd
="UserPwd01"
UserLevel
="88"
/>
5
<
User
UserID
="UserID02"
UserPwd
="UserPwd02"
UserLevel
="92"
/>
6
<
User
UserID
="UserID03"
UserPwd
="UserPwd03"
UserLevel
="95"
/>
7
<
User
UserID
="UserID04"
UserPwd
="UserPwd04"
UserLevel
="98"
/>
8
<
User
UserID
="UserID05"
UserPwd
="UserPwd05"
UserLevel
="101"
/>
9
<
User
UserID
="UserID06"
UserPwd
="UserPwd06"
UserLevel
="105"
/>
10
<
User
UserID
="UserID07"
UserPwd
="UserPwd07"
UserLevel
="108"
/>
11
<
User
UserID
="UserID08"
UserPwd
="UserPwd08"
UserLevel
="111"
/>
12
<
User
UserID
="UserID09"
UserPwd
="UserPwd09"
UserLevel
="115"
/>
13
</
UserInfo
>
14
2、查找特定属性
1
CMarkup xml;
2
BOOL bLoadXml
=
FALSE;
3
BOOL bFind
=
FALSE;
4
bLoadXml
=
xml.Load(
"
UserInfo.xml
"
);
5
if
(bLoadXml)
6
{
7
CString strID;
8
CString strPwd;
9
xml.ResetMainPos();
10
xml.FindElem();
//
UserInfo
11
while
(xml.FindChildElem(
"
User
"
))
12
{
13
strID
=
xml.GetChildAttrib(
"
UserID
"
);
14
strPwd
=
xml.GetChildAttrib(
"
UserPwd
"
);
15
TRACE(
"
/n---id:%s,pwd:%s---/n
"
,strID,strPwd);
16
if
(strID
==
"
UserID02
"
&&
strPwd
==
"
UserPwd02
"
)
17
{
18
bFind
=
TRUE;
19
break
;
20
}
21
}
22
}
23
if
(bFind
==
TRUE)
24
TRACE(
"
/n---find---/n
"
);
25
else
26
TRACE(
"
/n---not find---/n
"
);
修改特定属性
1
CMarkup xml;
2
BOOL bFind
=
FALSE;
3
BOOL bLoadXml
=
FALSE;
4
bLoadXml
=
xml.Load(
"
UserInfo.xml
"
);
5
if
(bLoadXml)
6
{
7
CString strID;
8
CString strPwd;
9
xml.ResetMainPos();
10
xml.FindElem();
//
UserInfo
11
while
(xml.FindChildElem(
"
User
"
))
12
{
13
strID
=
xml.GetChildAttrib(
"
UserID
"
);
14
strPwd
=
xml.GetChildAttrib(
"
UserPwd
"
);
15
TRACE(
"
/n--id:%s,pwd:%s--/n
"
,strID,strPwd);
16
if
(strID
==
"
UserID02
"
&&
strPwd
==
"
UserPwd02
"
)
17
{
18
bFind
=
TRUE;
19
xml.SetChildAttrib(
"
UserID
"
,strID
+
CString(
"
Modified
"
));
20
xml.Save(
"
UserInfo.xml
"
);
21
break
;
22
}
23
}
24
}
25
if
(bFind
==
TRUE)
26
TRACE(
"
/n---find---/n
"
);
27
else
28
TRACE(
"
/n---not find---/n
"
);
效果如下:
1
<?
xml version="1.0" encoding="UTF-8"
?>
2
<
UserInfo
>
3
<
User
UserID
="UserID00"
UserPwd
="UserPwd00"
UserLevel
="85"
/>
4
<
User
UserID
="UserID01"
UserPwd
="UserPwd01"
UserLevel
="88"
/>
5
<
User
UserID
="UserID02Modified"
UserPwd
="UserPwd02"
UserLevel
="92"
/>
6
<
User
UserID
="UserID03"
UserPwd
="UserPwd03"
UserLevel
="95"
/>
7
<
User
UserID
="UserID04"
UserPwd
="UserPwd04"
UserLevel
="98"
/>
8
<
User
UserID
="UserID05"
UserPwd
="UserPwd05"
UserLevel
="101"
/>
9
<
User
UserID
="UserID06"
UserPwd
="UserPwd06"
UserLevel
="105"
/>
10
<
User
UserID
="UserID07"
UserPwd
="UserPwd07"
UserLevel
="108"
/>
11
<
User
UserID
="UserID08"
UserPwd
="UserPwd08"
UserLevel
="111"
/>
12
<
User
UserID
="UserID09"
UserPwd
="UserPwd09"
UserLevel
="115"
/>
13
</
UserInfo
>
1
CMarkup xml;
2 xml.Load("School.xml");
3 BOOL bFind=TRUE;
4 xml.ResetMainPos();
5
6 while(xml.FindChildElem("Department"))
7 {
8 CString strTagName=_T("");
9 CString strData=_T("");
10 strTagName=xml.GetChildTagName(); //此时节点是父节点
11 strData=xml.GetChildData();
12 TRACE("/n---tagName:%s,Data:%s--/n",strTagName,strData);
13 }
//***********************这样也可以*****************************/
1
CMarkup xml;
2 xml.Load("School.xml");
3 BOOL bFind = TRUE;
4 xml.ResetMainPos();
5
6 while (xml.FindChildElem("Department"))
7 {
8 xml.IntoElem();
9 CString strTagName = _T("");
10 CString strData = _T("");
11 strTagName = xml.GetTagName();
12 strData = xml.GetData();
13 TRACE("/n---tagName:%s,Data:%s--/n",strTagName,strData);
14 xml.OutOfElem();
15 }
//***********************或者这样也可以***************************/
1
CMarkup xml;
2 xml.Load("School.xml");
3 BOOL bFind = TRUE;
4 xml.ResetMainPos();
5 xml.FindElem(); //School
6 xml.IntoElem();
7
8 while (xml.FindElem("Department"))
9 {
10 CString strTagName = _T("");
11 CString strData = _T("");
12 strTagName = xml.GetTagName();
13 strData = xml.GetData();
14 TRACE("/n---tagName:%s,Data:%s--/n",strTagName,strData);
15 }
3、修改元素
//把Department为”English“改为”Chinese“
1
CMarkup xml;
2
BOOL bLoadXml
=
FALSE;
3
bLoadXml
=
xml.Load(
"
School.xml
"
);
4
5
if
(bLoadXml)
6
{
7
CString str
=
_T(
""
);
8
xml.ResetMainPos();
9
xml.FindElem();
10
xml.IntoElem();
11
while
(xml.FindElem(
"
Department
"
))
12
{
13
str
=
xml.GetData();
14
if
(str
==
"
English
"
)
15
{
16
xml.SetData(
"
Chinese
"
);
17
xml.Save(
"
School.xml
"
);
18
break
;
19
}
20
}
21
}
效果如下:
1
<?
xml version="1.0" encoding="UTF-8"
?>
2
<
School
>
3
<
Department
>
Automation
</
Department
>
4
<
Department
>
Computer
</
Department
>
5
<
Department
>
Math
</
Department
>
6
<
Department
>
Chinese
</
Department
>
7
</
School
>
8
1
CMarkup xml;
2 xml.Load("School.xml");
3 BOOL bFind=TRUE;
4 xml.ResetMainPos();
5
6 while(xml.FindChildElem("Department"))
7 {
8 CString strTagName=_T("");
9 CString strData=_T("");
10 strTagName=xml.GetChildTagName(); //此时节点是父节点
11 strData=xml.GetChildData();
12 TRACE("/n---tagName:%s,Data:%s--/n",strTagName,strData);
13 }
//***********************这样也可以*****************************/
1
CMarkup xml;
2 xml.Load("School.xml");
3 BOOL bFind = TRUE;
4 xml.ResetMainPos();
5
6 while (xml.FindChildElem("Department"))
7 {
8 xml.IntoElem();
9 CString strTagName = _T("");
10 CString strData = _T("");
11 strTagName = xml.GetTagName();
12 strData = xml.GetData();
13 TRACE("/n---tagName:%s,Data:%s--/n",strTagName,strData);
14 xml.OutOfElem();
15 }
//***********************或者这样也可以***************************/
1
CMarkup xml;
2 xml.Load("School.xml");
3 BOOL bFind = TRUE;
4 xml.ResetMainPos();
5 xml.FindElem(); //School
6 xml.IntoElem();
7
8 while (xml.FindElem("Department"))
9 {
10 CString strTagName = _T("");
11 CString strData = _T("");
12 strTagName = xml.GetTagName();
13 strData = xml.GetData();
14 TRACE("/n---tagName:%s,Data:%s--/n",strTagName,strData);
15 }
//***********结果**************
---tagName:Department,Data:Automation--