浅谈XML格式以及写入方法

发布时间:2024年01月10日

xml是大家普遍使用的一种通用化的格式文件,那么这种格式到底有什么奥秘,今天我们就一起看看吧.

在这里插入图片描述
上图是一段xml用浏览器打开的显示格式,每一个箭头对应一个属性内容,当然,属性内容还可以多次嵌套,展开的一部分如上图所示.
以尖括号+ 名称 例如: 开始
以尖括号+/+名称,结束结束

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>第一行一般写xml的版本,编码格式,

以便后续或他人解析使用,编码格式不正确解析出来会出现各种问题,多空格或乱码等等.

第二行就是我们需要的数据名称,

属性例如:名称LotID,属性lotID,row,column =后面的就是该属性(名称)的值.

搞清楚这个,那么我们在写入,读取数据的时候就非常的方便,根据格式就可以轻松读写.

CMarkup xml;
xml.Load(xxxx)第一个函数xml的加载,load,读取xml文件,一般是X:\\xx\xx.xml(.XML)区分大小写后缀.
加载成功之后,我们就可以读取数据内容.
xml.IntoElem();加载之后,我们使用IntoItem()函数,进入下一次根目录,接着查找我们的属性名称,例如	
BOOL  bstr =xml.FindElem(_T("LotID"));
按照顺序,依次获取对应的属性,属性值.
xml.GetAttrib(XXX);获取对应属性的属性值.
	if (bstr )
	{
		xml.IntoElem();
		str=  xml.FindElem(_T("MapData"));
		xml.IntoElem();
		str=  xml.FindElem(_T("SubstrateMaps"));
		xml.IntoElem();
	}
	当有多个重复属性名称时,我们可以使用循环去查找,例如我们想获取BinCode的值,就需要先找到overlay-->BinCodeMap--->BinCode,具体实现代码:
	每一个IntoElem对应一个OutElem,而且必须是一一对应关系.
		while (xml.FindElem(_T("SubstrateMap")))
			{	 
					    SubStrateId=xml.GetAttrib(_T("SubstrateId"));
			     	SubStrateType=xml.GetAttrib(_T("SubstrateType"));

				xml.IntoElem();
				int mappingIndex=0;
				int oldmappingIndex=0;
				while(xml.FindElem(_T("Overlay")))
				{
					mapName=xml.GetAttrib(_T("MapName"));
					xml.IntoElem();
					BOOL binMap=xml.FindElem(_T("BinCodeMap"));
					{
					
						 CString strMap,strMapAll;
						 	while(xml.FindChildElem(_T("BinCode")))
						{
							
							strMap=xml.GetChildData();
							strMap.Remove(_T(''));
								CString strErrorCode,strErrorCodeTemp;
							int len=strMap.GetLength();
							for(int i=0;i<len;i++)
							{
								TCHAR s = strMap.GetAt(i);
		                   }				
		 }xml.OutOfElem(); 


             }xml.OutOfElem(); 

xml.OutOfElem();
xml.OutOfElem();

以上代码总共出现5个因此,结束时候也应该是5个OutOfElem();
读数据先查找FindElem,FindChildElem,根据名称我们就可以很好区分是子元素还是根目录元素,像这种BinCode就属于子元素,多次重复出现在多行的一般是子元素childElem,分开的 中间有间隔的多次出现的如SubstrateMap,SubstrateId这样的通常认为是Elem.

写的的时候就更简单,获取的数据,写到对应的属性值中就可以,
xml.AddElem()属性元素名称
xml.SetAttrib()属性名称
xml.SetElemContent();属性内容
子元素采用循环的方式写入对应的数据内容:BinCode的写入方法简例如下
CString strTemp;
for (int j=0;j<Row;j++)
{
xml.AddChildElem(_T(“BinCode”));
strTemp=_T(“”);
for(int i=0;i<strResult.GetSize();i++)
{

						strTemp+=strResult.GetAt(i);
						xml.SetChildData(strTemp);
					}
				}
						bool ret=xml.Save(xxx.xml);
						写完之后记得保存数据到文件就可以了

这样我们xml的读写就基本完成了,你学会了?
格式—>Load—>findElem–GetAttrib.

文章来源:https://blog.csdn.net/u011637657/article/details/135449233
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。