Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2007360
  • 博文数量: 356
  • 博客积分: 8284
  • 博客等级: 中将
  • 技术积分: 4580
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-15 20:25
个人简介

天行健,君子以自强不息

文章分类

全部博文(356)

文章存档

2018年(1)

2016年(4)

2015年(13)

2014年(14)

2013年(2)

2012年(25)

2011年(43)

2010年(65)

2009年(189)

分类: C/C++

2015-10-23 20:08:33


点击(此处)折叠或打开

  1. // xmlDlg.cpp : 实现文件
  2. //

  3. #include "stdafx.h"
  4. #include "xml.h"
  5. #include "xmlDlg.h"


  6. #include "tinystr.h"
  7. #include "tinyxml.h"

  8. #include <string>

  9. #include <iostream>

  10. #pragma comment(linker, "/subsystem:\"CONSOLE\" /entry:\"WinMainCRTStartup\"")

  11. #ifdef _DEBUG
  12. #define new DEBUG_NEW
  13. #endif

  14. using namespace std;



  15. // 用于应用程序“关于”菜单项的 CAboutDlg 对话框

  16. class CAboutDlg : public CDialog
  17. {
  18. public:
  19.     CAboutDlg();

  20. // 对话框数据
  21.     enum { IDD = IDD_ABOUTBOX };

  22.     protected:
  23.     virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持

  24. // 实现
  25. protected:
  26.     DECLARE_MESSAGE_MAP()
  27. };

  28. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  29. {
  30. }

  31. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  32. {
  33.     CDialog::DoDataExchange(pDX);
  34. }

  35. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  36. END_MESSAGE_MAP()


  37. // CxmlDlg 对话框




  38. CxmlDlg::CxmlDlg(CWnd* pParent /*=NULL*/)
  39.     : CDialog(CxmlDlg::IDD, pParent)
  40. {
  41.     m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  42. }

  43. void CxmlDlg::DoDataExchange(CDataExchange* pDX)
  44. {
  45.     CDialog::DoDataExchange(pDX);
  46. }

  47. BEGIN_MESSAGE_MAP(CxmlDlg, CDialog)
  48.     ON_WM_SYSCOMMAND()
  49.     ON_WM_PAINT()
  50.     ON_WM_QUERYDRAGICON()
  51.     //}}AFX_MSG_MAP
  52. END_MESSAGE_MAP()


  53. CString GetAppPath()
  54. {
  55.     TCHAR modulePath[MAX_PATH];
  56.     GetModuleFileName(NULL, modulePath, MAX_PATH);
  57.     CString strModulePath(modulePath);
  58.     strModulePath = strModulePath.Left(strModulePath.ReverseFind(_T('\\')));

  59.     return strModulePath;

  60. }

  61. bool CreateXmlFile(string& szFileName)
  62. {//创建xml文件,szFilePath为文件保存的路径,若创建成功返回true,否则false
  63.     try
  64.     {
  65.         //创建一个XML的文档对象。
  66.         TiXmlDocument *myDocument = new TiXmlDocument();
  67.         //创建一个根元素并连接。
  68.         TiXmlElement *RootElement = new TiXmlElement("Persons");
  69.         myDocument->LinkEndChild(RootElement);
  70.         //创建一个Person元素并连接。
  71.         TiXmlElement *PersonElement = new TiXmlElement("Person");
  72.         RootElement->LinkEndChild(PersonElement);
  73.         //设置Person元素的属性。
  74.         PersonElement->SetAttribute("ID", "1");
  75.         //创建name元素、age元素并连接。
  76.         TiXmlElement *NameElement = new TiXmlElement("name");
  77.         TiXmlElement *AgeElement = new TiXmlElement("age");
  78.         TiXmlElement *SexElement = new TiXmlElement("sex");//add
  79.         
  80.         TiXmlElement *MonenyElement = new TiXmlElement("moneny");//add

  81.         
  82.         PersonElement->LinkEndChild(NameElement);
  83.         PersonElement->LinkEndChild(AgeElement);
  84.         PersonElement->LinkEndChild(SexElement);//add
  85.         PersonElement->LinkEndChild(MonenyElement);

  86.         //设置name元素和age元素的内容并连接。
  87.         TiXmlText *NameContent = new TiXmlText("XXX");
  88.         TiXmlText *AgeContent = new TiXmlText("22");
  89.         TiXmlText *SexContent = new TiXmlText("male");
  90.         TiXmlText *MonenyContent = new TiXmlText("231234");

  91.         MonenyElement->LinkEndChild(MonenyContent);
  92.         NameElement->LinkEndChild(NameContent);
  93.         AgeElement->LinkEndChild(AgeContent);
  94.         SexElement->LinkEndChild(SexContent);//add

  95.         CString appPath = GetAppPath();
  96.         string seperator = "\\";

  97.         //appPath= appPath.GetBuffer(0) +"\\"+(CHAR *)szFileName;

  98.         string fullPath = "C:\\x.xml";

  99.         myDocument->SaveFile(fullPath.c_str());//保存到文件
  100.     }
  101.     catch (string& e)
  102.     {
  103.         return false;
  104.     }
  105.     return true;
  106. }

  107. bool ReadXmlFile(string& szFileName)
  108. {
  109.     try
  110.     {
  111.         string fullPath = "C://x.xml";
  112.         //create a doc object
  113.         TiXmlDocument *myDocument = new TiXmlDocument(fullPath.c_str());
  114.         myDocument->LoadFile();
  115.         //get root object
  116.         TiXmlElement *rootElement = myDocument->RootElement();

  117.         //get number
  118.         TiXmlElement *firstPerson = rootElement->FirstChildElement();

  119.         TiXmlElement *nameElement = firstPerson->FirstChildElement();
  120.         TiXmlElement *ageElement = nameElement->NextSiblingElement();
  121.         TiXmlElement *sexElement = ageElement->NextSiblingElement();
  122.         TiXmlElement *monenyElement = sexElement->NextSiblingElement();

  123.     

  124.         CString strTmp;

  125.         strTmp = nameElement->FirstChild()->Value();
  126.         //printf("%s",strTmp);

  127.         strTmp = ageElement->FirstChild()->Value();
  128.         //printf("%s",strTmp);


  129.         cout<<"name:\t"<<nameElement->FirstChild()->Value()<<"\tage:\t"<<ageElement->FirstChild()->Value()
  130.             <<"\tsex:\t"<<sexElement->FirstChild()->Value()<<"\tmoneny:\t"<<monenyElement->FirstChild()->Value()<<"\r\n"
  131.             <<endl;




  132.     }
  133.     catch (...)
  134.     {
  135.         return false;
  136.     }

  137.     return true;


  138. }

  139. // CxmlDlg 消息处理程序

  140. BOOL CxmlDlg::OnInitDialog()
  141. {
  142.     CDialog::OnInitDialog();

  143.     // 将“关于...”菜单项添加到系统菜单中。

  144.     // IDM_ABOUTBOX 必须在系统命令范围内。
  145.     ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  146.     ASSERT(IDM_ABOUTBOX < 0xF000);

  147.     CMenu* pSysMenu = GetSystemMenu(FALSE);
  148.     if (pSysMenu != NULL)
  149.     {
  150.         CString strAboutMenu;
  151.         strAboutMenu.LoadString(IDS_ABOUTBOX);
  152.         if (!strAboutMenu.IsEmpty())
  153.         {
  154.             pSysMenu->AppendMenu(MF_SEPARATOR);
  155.             pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  156.         }
  157.     }

  158.     // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
  159.     // 执行此操作
  160.     SetIcon(m_hIcon, TRUE);            // 设置大图标
  161.     SetIcon(m_hIcon, FALSE);        // 设置小图标

  162.     // TODO: 在此添加额外的初始化代码
  163.     
  164.     string name = "x";


  165.     CreateXmlFile(name);

  166.     ReadXmlFile(name);


  167.     return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
  168. }

  169. void CxmlDlg::OnSysCommand(UINT nID, LPARAM lParam)
  170. {
  171.     if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  172.     {
  173.         CAboutDlg dlgAbout;
  174.         dlgAbout.DoModal();
  175.     }
  176.     else
  177.     {
  178.         CDialog::OnSysCommand(nID, lParam);
  179.     }
  180. }







  181. // 如果向对话框添加最小化按钮,则需要下面的代码
  182. // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
  183. // 这将由框架自动完成。

  184. void CxmlDlg::OnPaint()
  185. {
  186.     if (IsIconic())
  187.     {
  188.         CPaintDC dc(this); // 用于绘制的设备上下文

  189.         SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

  190.         // 使图标在工作矩形中居中
  191.         int cxIcon = GetSystemMetrics(SM_CXICON);
  192.         int cyIcon = GetSystemMetrics(SM_CYICON);
  193.         CRect rect;
  194.         GetClientRect(&rect);
  195.         int x = (rect.Width() - cxIcon + 1) / 2;
  196.         int y = (rect.Height() - cyIcon + 1) / 2;

  197.         // 绘制图标
  198.         dc.DrawIcon(x, y, m_hIcon);
  199.     }
  200.     else
  201.     {
  202.         CDialog::OnPaint();
  203.     }
  204. }

  205. //当用户拖动最小化窗口时系统调用此函数取得光标显示。
  206. //
  207. HCURSOR CxmlDlg::OnQueryDragIcon()
  208. {
  209.     return static_cast<HCURSOR>(m_hIcon);
  210. }
主要分为写xml文件和读xml文件,设置为unicode字符集,不使用预编译头,否则编译会出错,提示stdafx。h相关问题。tinyxml源代码网上下载最新版本。
可以在wince系统上使用,wince上使用的时候,要修改tinyxml的cpp和h文件,和在电脑上使用仅仅此一处差别,测试通过。

另外tinyxml写入中文时,打开xml发现文件存在问题,网上的例程名字都是“周星星”,写入xml就是乱码,我这里改成英文的,就正常,原因不明。
阅读(1028) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~