注: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文件相关推荐

  1. DOM4J读取和写入XML文件

    DOM4J是JDOM的一种智能分支.它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持.XML Schema支持以及用于大文档或流化文档的基于事件的处理.它还提供了构建文档表示的选项, ...

  2. pythonpandas读取csv文件最后一行_简单小案例(一):使用Pandas在Python中读取和写入CSV文件...

    前期文章链接: YOLOv3论文 https://arxiv.org/pdf/1804.02767.pdf 正文: 有许多方法可以在Python中读写CSV文件.有几种不同的方法,例如,您可以使用Py ...

  3. [转载] pythonpandas读取csv文件最后一行_简单小案例(一):使用Pandas在Python中读取和写入CSV文件...

    参考链接: 使用Pandas在Python中读写CSV文件 前期文章链接: YOLOv3论文 https://arxiv.org/pdf/1804.02767.pdf 正文: 有许多方法可以在Pyth ...

  4. python将数据写入xml文件_python读取/创建XML文件

    Python中定义了很多处理XML的函数,如xml.dom,它会在处理文件之前,将根据xml文件构建的树状数据存在内存.还有xml.sax,它实现了SAX API,这个模块牺牲了便捷性,换取了速度和减 ...

  5. DOM4J解析XML文档、Document对象、节点对象节点对象属性、将文档写入XML文件(详细)...

    Dom4j是一个简单.灵活的开放源代码的库.Dom4j是由早期开发JDOM开发的.与JDOM不同的是,dom4j使用接口和抽象的人分离出来而后独立基类,虽然Dom4j的API相对要复杂一些,但它提供了 ...

  6. c++读取和写入TXT文件的整理

    c++读取和写入TXT文件的整理 #include "stdafx.h" #include <iostream> //无论读写都要包含<fstream>头文 ...

  7. c++读取和写入TXT文件的整理 1

    c++读取和写入TXT文件的整理 #include "stdafx.h" #include <iostream> //无论读写都要包含<fstream>头文 ...

  8. python读取excel内容和写入_Python读取和写入Excel文件

    制作Excel表 常用方法说明 Workbook类 Workbook类创建一个XlswWrite的Workbook对象,相当于创建一个excel表 And_worksheet()用来创建工作表,默认为 ...

  9. python之读取、写入 excel 文件

    本文主要讨论如何使用 python 读取.写入 excel 文件.如有表述不当之处欢迎批评指正.欢迎任何形式的转载,但请务必注明出处. 目录 1. 引言 2. 读取 Excel 文件 3. 写入 Ex ...

最新文章

  1. mysql btmp 删除_mysql-如何在VDS上运行docker(lxd /容器)
  2. 【 FPGA 】UltraFast设计方法学:在Vivado中使用设计规则检查
  3. Bellman_Ford算法
  4. 从央视到谷歌:聊一聊竞价广告的机制设计
  5. 运输pascal 90分程序
  6. Flex Skin Design Extensions Flex Component Kit 下载.
  7. mysql 昨天日期_MySQL 日期函数 今天明天昨天......
  8. bzoj 1003物流运输 区间dp+spfa
  9. json解析与序列化
  10. edius裁剪快捷键_edius5.0常用快捷键 edius快捷键使用大全
  11. 计算机键盘无法使用的原因,电脑键盘失灵的原因及解决方法
  12. cad延伸命令怎么用_CAD缩放怎么用,CAD缩放图文教程
  13. matlab连接mysql有什么用_MATLAB连接SQLServer和MySql数据库
  14. CuraEngine VS2017
  15. java-php-python-ssm新生报到管理计算机毕业设计
  16. html怎么用img添加图片,img标签(html怎么用img添加图片)
  17. Windows10更新后耳机没声音
  18. C++ 函数反汇编跟踪以及栈结构分析
  19. 1微秒等于多少皮秒_秒的换算:ms(毫秒),μs(微秒),ns(纳秒),ps(皮秒)
  20. 【中小型局域网络搭建】

热门文章

  1. 投资平台诚诚富众五种个人投资理财方式
  2. 小米手机怎么录制视频 手机录制视频的方法
  3. 汇报措辞:你懂得怎样向领导汇报吗(审阅、审批、批阅、批示、查阅)?
  4. wps excel 中将一行多列数据转换为一行两列的格式 的方法函数
  5. 微信公众号图文编辑新手教程
  6. BTrace-Java 线上问题排查神器
  7. [c++] 常成员函数
  8. 哺乳期这几种还真的要少吃,不能吃的食物真有那么多?
  9. s一般怎么称呼自己的m_男人一般都这样称呼自己的情人?
  10. IROS2020 论文阅读