您的位置:首页 > 其它

在VC中用CMarkup类操纵XML

2015-04-15 17:11 302 查看
首先到http://www.firstobject.com/dn_markup.htm上面下载CMarkup类,将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、浏览特定元素

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--
---tagName:Department,Data:Computer--
---tagName:Department,Data:Math--
---tagName:Department,Data:English--

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


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");

3、修改特定属性

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: