-
// xmlDlg.cpp : 实现文件
-
//
-
-
#include "stdafx.h"
-
#include "xml.h"
-
#include "xmlDlg.h"
-
-
-
#include "tinystr.h"
-
#include "tinyxml.h"
-
-
#include <string>
-
-
#include <iostream>
-
-
#pragma comment(linker, "/subsystem:\"CONSOLE\" /entry:\"WinMainCRTStartup\"")
-
-
#ifdef _DEBUG
-
#define new DEBUG_NEW
-
#endif
-
-
using namespace std;
-
-
-
-
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
-
-
class CAboutDlg : public CDialog
-
{
-
public:
-
CAboutDlg();
-
-
// 对话框数据
-
enum { IDD = IDD_ABOUTBOX };
-
-
protected:
-
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
-
-
// 实现
-
protected:
-
DECLARE_MESSAGE_MAP()
-
};
-
-
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
-
{
-
}
-
-
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
-
{
-
CDialog::DoDataExchange(pDX);
-
}
-
-
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
-
END_MESSAGE_MAP()
-
-
-
// CxmlDlg 对话框
-
-
-
-
-
CxmlDlg::CxmlDlg(CWnd* pParent /*=NULL*/)
-
: CDialog(CxmlDlg::IDD, pParent)
-
{
-
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
-
}
-
-
void CxmlDlg::DoDataExchange(CDataExchange* pDX)
-
{
-
CDialog::DoDataExchange(pDX);
-
}
-
-
BEGIN_MESSAGE_MAP(CxmlDlg, CDialog)
-
ON_WM_SYSCOMMAND()
-
ON_WM_PAINT()
-
ON_WM_QUERYDRAGICON()
-
//}}AFX_MSG_MAP
-
END_MESSAGE_MAP()
-
-
-
CString GetAppPath()
-
{
-
TCHAR modulePath[MAX_PATH];
-
GetModuleFileName(NULL, modulePath, MAX_PATH);
-
CString strModulePath(modulePath);
-
strModulePath = strModulePath.Left(strModulePath.ReverseFind(_T('\\')));
-
-
return strModulePath;
-
-
}
-
-
bool CreateXmlFile(string& szFileName)
-
{//创建xml文件,szFilePath为文件保存的路径,若创建成功返回true,否则false
-
try
-
{
-
//创建一个XML的文档对象。
-
TiXmlDocument *myDocument = new TiXmlDocument();
-
//创建一个根元素并连接。
-
TiXmlElement *RootElement = new TiXmlElement("Persons");
-
myDocument->LinkEndChild(RootElement);
-
//创建一个Person元素并连接。
-
TiXmlElement *PersonElement = new TiXmlElement("Person");
-
RootElement->LinkEndChild(PersonElement);
-
//设置Person元素的属性。
-
PersonElement->SetAttribute("ID", "1");
-
//创建name元素、age元素并连接。
-
TiXmlElement *NameElement = new TiXmlElement("name");
-
TiXmlElement *AgeElement = new TiXmlElement("age");
-
TiXmlElement *SexElement = new TiXmlElement("sex");//add
-
-
TiXmlElement *MonenyElement = new TiXmlElement("moneny");//add
-
-
-
PersonElement->LinkEndChild(NameElement);
-
PersonElement->LinkEndChild(AgeElement);
-
PersonElement->LinkEndChild(SexElement);//add
-
PersonElement->LinkEndChild(MonenyElement);
-
-
//设置name元素和age元素的内容并连接。
-
TiXmlText *NameContent = new TiXmlText("XXX");
-
TiXmlText *AgeContent = new TiXmlText("22");
-
TiXmlText *SexContent = new TiXmlText("male");
-
TiXmlText *MonenyContent = new TiXmlText("231234");
-
-
MonenyElement->LinkEndChild(MonenyContent);
-
NameElement->LinkEndChild(NameContent);
-
AgeElement->LinkEndChild(AgeContent);
-
SexElement->LinkEndChild(SexContent);//add
-
-
CString appPath = GetAppPath();
-
string seperator = "\\";
-
-
//appPath= appPath.GetBuffer(0) +"\\"+(CHAR *)szFileName;
-
-
string fullPath = "C:\\x.xml";
-
-
myDocument->SaveFile(fullPath.c_str());//保存到文件
-
}
-
catch (string& e)
-
{
-
return false;
-
}
-
return true;
-
}
-
-
bool ReadXmlFile(string& szFileName)
-
{
-
try
-
{
-
string fullPath = "C://x.xml";
-
//create a doc object
-
TiXmlDocument *myDocument = new TiXmlDocument(fullPath.c_str());
-
myDocument->LoadFile();
-
//get root object
-
TiXmlElement *rootElement = myDocument->RootElement();
-
-
//get number
-
TiXmlElement *firstPerson = rootElement->FirstChildElement();
-
-
TiXmlElement *nameElement = firstPerson->FirstChildElement();
-
TiXmlElement *ageElement = nameElement->NextSiblingElement();
-
TiXmlElement *sexElement = ageElement->NextSiblingElement();
-
TiXmlElement *monenyElement = sexElement->NextSiblingElement();
-
-
-
-
CString strTmp;
-
-
strTmp = nameElement->FirstChild()->Value();
-
//printf("%s",strTmp);
-
-
strTmp = ageElement->FirstChild()->Value();
-
//printf("%s",strTmp);
-
-
-
cout<<"name:\t"<<nameElement->FirstChild()->Value()<<"\tage:\t"<<ageElement->FirstChild()->Value()
-
<<"\tsex:\t"<<sexElement->FirstChild()->Value()<<"\tmoneny:\t"<<monenyElement->FirstChild()->Value()<<"\r\n"
-
<<endl;
-
-
-
-
-
}
-
catch (...)
-
{
-
return false;
-
}
-
-
return true;
-
-
-
}
-
-
// CxmlDlg 消息处理程序
-
-
BOOL CxmlDlg::OnInitDialog()
-
{
-
CDialog::OnInitDialog();
-
-
// 将“关于...”菜单项添加到系统菜单中。
-
-
// IDM_ABOUTBOX 必须在系统命令范围内。
-
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
-
ASSERT(IDM_ABOUTBOX < 0xF000);
-
-
CMenu* pSysMenu = GetSystemMenu(FALSE);
-
if (pSysMenu != NULL)
-
{
-
CString strAboutMenu;
-
strAboutMenu.LoadString(IDS_ABOUTBOX);
-
if (!strAboutMenu.IsEmpty())
-
{
-
pSysMenu->AppendMenu(MF_SEPARATOR);
-
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
-
}
-
}
-
-
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
-
// 执行此操作
-
SetIcon(m_hIcon, TRUE); // 设置大图标
-
SetIcon(m_hIcon, FALSE); // 设置小图标
-
-
// TODO: 在此添加额外的初始化代码
-
-
string name = "x";
-
-
-
CreateXmlFile(name);
-
-
ReadXmlFile(name);
-
-
-
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
-
}
-
-
void CxmlDlg::OnSysCommand(UINT nID, LPARAM lParam)
-
{
-
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
-
{
-
CAboutDlg dlgAbout;
-
dlgAbout.DoModal();
-
}
-
else
-
{
-
CDialog::OnSysCommand(nID, lParam);
-
}
-
}
-
-
-
-
-
-
-
-
// 如果向对话框添加最小化按钮,则需要下面的代码
-
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
-
// 这将由框架自动完成。
-
-
void CxmlDlg::OnPaint()
-
{
-
if (IsIconic())
-
{
-
CPaintDC dc(this); // 用于绘制的设备上下文
-
-
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
-
-
// 使图标在工作矩形中居中
-
int cxIcon = GetSystemMetrics(SM_CXICON);
-
int cyIcon = GetSystemMetrics(SM_CYICON);
-
CRect rect;
-
GetClientRect(&rect);
-
int x = (rect.Width() - cxIcon + 1) / 2;
-
int y = (rect.Height() - cyIcon + 1) / 2;
-
-
// 绘制图标
-
dc.DrawIcon(x, y, m_hIcon);
-
}
-
else
-
{
-
CDialog::OnPaint();
-
}
-
}
-
-
//当用户拖动最小化窗口时系统调用此函数取得光标显示。
-
//
-
HCURSOR CxmlDlg::OnQueryDragIcon()
-
{
-
return static_cast<HCURSOR>(m_hIcon);
-
}
主要分为写xml文件和读xml文件,设置为unicode字符集,不使用预编译头,否则编译会出错,提示stdafx。h相关问题。tinyxml源代码网上下载最新版本。
可以在wince系统上使用,wince上使用的时候,要修改tinyxml的cpp和h文件,和在电脑上使用仅仅此一处差别,测试通过。
另外tinyxml写入中文时,打开xml发现文件存在问题,网上的例程名字都是“周星星”,写入xml就是乱码,我这里改成英文的,就正常,原因不明。
阅读(1022) | 评论(0) | 转发(0) |