MFCXTP库读取和写入XML文件
注:XTP库文件可以在网上下载,然后引用到所写的程序中
1、XML示范文件
//示例文件
<?xml version="1.0" encoding="UTF-8"?>
<GalleryLibrary CompactMode="1"><GalleryItems><GalleryItem ID="{704C9D93-2493-4260-9D11-7812E8EB6351}" Class="CPipeNodeNormalItem" DisplayName="动力" BlockName="动力"/><GalleryItem ID="{AFCA1A08-0800-4319-8FD5-AD7BF26946D1}" Class="CPipeNodeValveGalleryItem" DisplayName="蝶阀" BlockName="蝶阀"/><GalleryItem ID="{442BC09B-3C44-4ed9-81F9-5ECD89F7C8A1}" Class="CPipeNodeValveGalleryItem" DisplayName="闸阀" BlockName="闸阀"/><GalleryItem ID="{30C040C0-55A6-4609-A6C4-F2DCC6FEF21C}" Class="CPipeNodeValveGalleryItem" DisplayName="球阀" BlockName="球阀"/></GalleryItems>
</GalleryLibrary>
2、数据结构
// 数据结构
struct stuNodeData
{CString strGuid;CString strClassName;CString strDisplayName;CString strBlockName;stuNodeData(){strGuid = _T("");strClassName = _T("");strDisplayName = _T("");strBlockName = _T("");}stuNodeData(const stuNodeData& src){strGuid = src.strGuid;strClassName = src.strClassName;strDisplayName = src.strDisplayName;strBlockName = src.strBlockName;}void DoPropExchange(CXTPPropExchange* pPX){PX_String(pPX, _T("ID"), strGuid);PX_String(pPX, _T("Class"), strClassName);PX_String(pPX, _T("DisplayName"), strDisplayName);PX_String(pPX, _T("BlockName"), strBlockName);}
};
3、读取函数
void LoadDatFile(CString dataPath, std::vector<stuNodeData>& vecNodeData)
{CXTPPropExchangeXMLNode px(TRUE, NULL, _T("GalleryLibrary"));if (!px.LoadFromFile(dataPath))return;if (!px.OnBeforeExchange())return;px.SetCompactMode(TRUE);// 读取据记录CString strPattern = _T("GalleryItems/GalleryItem");CXTPPropExchangeEnumeratorPtr enumData(px.GetEnumerator(strPattern));POSITION pos = enumData->GetPosition();while (pos){CXTPPropExchangeSection sec(enumData->GetNext(pos));stuNodeData data;data.DoPropExchange(&sec);vecNodeData.push_back(data);}
}
4、写入函数
bool WriteDatFile(CString& strFilePath, std::vector<stuNodeData>& vecNodeData)
{CXTPPropExchangeXMLNode px(FALSE, NULL, _T("GalleryLibrary"));if (!px.OnBeforeExchange()){return false;}px.SetCompactMode(TRUE);if (vecNodeData.size() <= 0){return false;}// 添加层节点CXTPPropExchangeSection secStandardList(px.GetSection(_T("StandardList")));CXTPPropExchangeEnumeratorPtr enumData( secStandardList->GetEnumerator(_T("Standard")));POSITION pos = enumData->GetPosition();for (int i = 0; i < vecNodeData.GetCount(); i++){CXTPPropExchangeSection sec(enumData->GetNext(pos));vecNodeData.at(i)->DoPropExchange(&sec);}px.SaveToFile(strFilePath);return true;
}
5、更高层级的扩展示范例子
void CustomWellData::DoPropExchange(CXTPPropExchange* pPX)
{PX_String(pPX, _T("name"), strStandardNm);PX_String(pPX, _T("material"), strMaterial);//pPX->IsLoading()此处可以通过CXTPPropExchangeXMLNode //px(FALSE, NULL, _T("GalleryLibrary"))的第一个参数来定if (pPX->IsLoading()){CXTPPropExchangeEnumeratorPtr enumData(pPX->GetEnumerator(_T("DrainageList/Drainage")));POSITION pos = enumData->GetPosition();while (pos){CXTPPropExchangeSection sec(enumData->GetNext(pos));CustomDrainageData* pData = new CustomDrainageData();pData->DoPropExchange(&sec);arrDrainageData.Add(pData);}}else{// 添加 SizeList 节点CXTPPropExchangeSection secList(pPX->GetSection(_T("DrainageList")));CXTPPropExchangeEnumeratorPtr enumData(pPX->GetEnumerator(_T("Drainage")));POSITION pos = enumData->GetPosition();for (int j = 0; j < arrDrainageData.GetSize(); j++){// 添加 Size 节点CXTPPropExchangeSection sec(enumData->GetNext(pos));arrDrainageData[j]->DoPropExchange(&sec);((CXTPPropExchangeXMLNode*)&secList)->PutSection((CXTPPropExchangeXMLNode*)&sec);}}
}
MFCXTP库读取和写入XML文件相关推荐
- DOM4J读取和写入XML文件
DOM4J是JDOM的一种智能分支.它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持.XML Schema支持以及用于大文档或流化文档的基于事件的处理.它还提供了构建文档表示的选项, ...
- pythonpandas读取csv文件最后一行_简单小案例(一):使用Pandas在Python中读取和写入CSV文件...
前期文章链接: YOLOv3论文 https://arxiv.org/pdf/1804.02767.pdf 正文: 有许多方法可以在Python中读写CSV文件.有几种不同的方法,例如,您可以使用Py ...
- [转载] pythonpandas读取csv文件最后一行_简单小案例(一):使用Pandas在Python中读取和写入CSV文件...
参考链接: 使用Pandas在Python中读写CSV文件 前期文章链接: YOLOv3论文 https://arxiv.org/pdf/1804.02767.pdf 正文: 有许多方法可以在Pyth ...
- python将数据写入xml文件_python读取/创建XML文件
Python中定义了很多处理XML的函数,如xml.dom,它会在处理文件之前,将根据xml文件构建的树状数据存在内存.还有xml.sax,它实现了SAX API,这个模块牺牲了便捷性,换取了速度和减 ...
- DOM4J解析XML文档、Document对象、节点对象节点对象属性、将文档写入XML文件(详细)...
Dom4j是一个简单.灵活的开放源代码的库.Dom4j是由早期开发JDOM开发的.与JDOM不同的是,dom4j使用接口和抽象的人分离出来而后独立基类,虽然Dom4j的API相对要复杂一些,但它提供了 ...
- c++读取和写入TXT文件的整理
c++读取和写入TXT文件的整理 #include "stdafx.h" #include <iostream> //无论读写都要包含<fstream>头文 ...
- c++读取和写入TXT文件的整理 1
c++读取和写入TXT文件的整理 #include "stdafx.h" #include <iostream> //无论读写都要包含<fstream>头文 ...
- python读取excel内容和写入_Python读取和写入Excel文件
制作Excel表 常用方法说明 Workbook类 Workbook类创建一个XlswWrite的Workbook对象,相当于创建一个excel表 And_worksheet()用来创建工作表,默认为 ...
- python之读取、写入 excel 文件
本文主要讨论如何使用 python 读取.写入 excel 文件.如有表述不当之处欢迎批评指正.欢迎任何形式的转载,但请务必注明出处. 目录 1. 引言 2. 读取 Excel 文件 3. 写入 Ex ...
最新文章
- mysql btmp 删除_mysql-如何在VDS上运行docker(lxd /容器)
- 【 FPGA 】UltraFast设计方法学:在Vivado中使用设计规则检查
- Bellman_Ford算法
- 从央视到谷歌:聊一聊竞价广告的机制设计
- 运输pascal 90分程序
- Flex Skin Design Extensions Flex Component Kit 下载.
- mysql 昨天日期_MySQL 日期函数 今天明天昨天......
- bzoj 1003物流运输 区间dp+spfa
- json解析与序列化
- edius裁剪快捷键_edius5.0常用快捷键 edius快捷键使用大全
- 计算机键盘无法使用的原因,电脑键盘失灵的原因及解决方法
- cad延伸命令怎么用_CAD缩放怎么用,CAD缩放图文教程
- matlab连接mysql有什么用_MATLAB连接SQLServer和MySql数据库
- CuraEngine VS2017
- java-php-python-ssm新生报到管理计算机毕业设计
- html怎么用img添加图片,img标签(html怎么用img添加图片)
- Windows10更新后耳机没声音
- C++ 函数反汇编跟踪以及栈结构分析
- 1微秒等于多少皮秒_秒的换算:ms(毫秒),μs(微秒),ns(纳秒),ps(皮秒)
- 【中小型局域网络搭建】