產(chǎn)品分類

      當(dāng)前位置: 首頁(yè) >

      類型分類:
      科普知識(shí)
      數(shù)據(jù)分類:

      紫金橋軟件讀寫XML文件

      發(fā)布日期:2022-04-26 點(diǎn)擊率:81

      • 關(guān)鍵詞:                                                                紫金橋軟件                                                                讀寫XML文件                                                                XML

      • 摘要:XML又名“可擴(kuò)展標(biāo)記語(yǔ)言”,它提供統(tǒng)一的方法來(lái)描述和交換獨(dú)立于應(yīng)用程序或供應(yīng)商的結(jié)構(gòu)化數(shù)據(jù)。這種統(tǒng)一性使得不同的軟件之間擁有一座通訊橋梁。XML廣泛應(yīng)用于自動(dòng)控制領(lǐng)域,因此在使用不同編程語(yǔ)言、組態(tài)工具時(shí)經(jīng)常需要解析XML格式文件。本文講述如何使用紫金橋軟件來(lái)讀取XML文件。


      一、概述

      XML又名“可擴(kuò)展標(biāo)記語(yǔ)言”,它提供統(tǒng)一的方法來(lái)描述和交換獨(dú)立于應(yīng)用程序或供應(yīng)商的結(jié)構(gòu)化數(shù)據(jù)。這種統(tǒng)一性使得不同的軟件之間擁有一座通訊橋梁。XML廣泛應(yīng)用于自動(dòng)控制領(lǐng)域,因此在使用不同編程語(yǔ)言、組態(tài)工具時(shí)經(jīng)常需要解析XML格式文件。本文講述如何使用紫金橋軟件來(lái)讀取XML文件。

      二、ObXml組件簡(jiǎn)介

      在紫金橋軟件中,使用ObXml組件可以方便的讀寫XML文件。

      ObXml組件用于解析或生成XML文件。使用Load函數(shù)載入XML文件或直接創(chuàng)建XML文件后,所有關(guān)于文件的修改操作都是針對(duì)內(nèi)存數(shù)據(jù)的修改,在使用Save函數(shù)或SaveAs函數(shù)之后才會(huì)將修改的結(jié)果保存至硬盤。

      每個(gè)XML結(jié)點(diǎn)以及結(jié)點(diǎn)屬性均對(duì)應(yīng)一個(gè)整型標(biāo)識(shí)號(hào),標(biāo)識(shí)號(hào)是在組件讀取XML(新建XML)后動(dòng)態(tài)生成的,作為執(zhí)行組件各種操作函數(shù)的參數(shù)以定位結(jié)點(diǎn)或結(jié)點(diǎn)屬性。因?yàn)闃?biāo)識(shí)號(hào)是動(dòng)態(tài)生成的,并非XML文件自帶信息,每次使用組件打開(kāi)(或新建)XML文件時(shí)同一結(jié)點(diǎn)的標(biāo)識(shí)號(hào)可能會(huì)不同,因此它只能在運(yùn)行時(shí)臨時(shí)獲取并使用,當(dāng)組件關(guān)閉后,這些標(biāo)識(shí)將失去意義。

      組件實(shí)現(xiàn)的功能:

      1)讀取已存在的XML文件,遍歷所有結(jié)點(diǎn),讀寫結(jié)點(diǎn)名字、結(jié)點(diǎn)文本、結(jié)點(diǎn)屬性,讀寫聲明語(yǔ)句。

      2)創(chuàng)建新的XML文件并保存。

      注意事項(xiàng):

      1)無(wú)法讀取或?qū)懭?/span>XML文件中的注釋語(yǔ)句。

      2)能夠識(shí)別UTF-8GBK、ANSI編碼格式。無(wú)法識(shí)別Unicode、Unicode big endian編碼格式。

      三、工程示例

      制作一個(gè)可以讀取XML文件的工程,主畫面包含兩部分:左側(cè)為一個(gè)樹形控件,用于顯示所有XML結(jié)點(diǎn);右側(cè)為一個(gè)結(jié)點(diǎn)屬性窗口,當(dāng)點(diǎn)擊樹形控件上的不同結(jié)點(diǎn)時(shí),屬性窗口顯示對(duì)應(yīng)結(jié)點(diǎn)的所有信息:結(jié)點(diǎn)名、結(jié)點(diǎn)文本、結(jié)點(diǎn)標(biāo)識(shí)、結(jié)點(diǎn)路徑、屬性列表,其中屬性列表包含每個(gè)屬性的屬性名、屬性文本、屬性標(biāo)識(shí)。效果圖如下:


      1、引入組件

      如果在子圖中已存在該組件,可以忽略此步驟,直接進(jìn)入下一步。

      在組態(tài)界面打開(kāi)子圖選擇畫面,在左側(cè)選擇“windows控件”一項(xiàng),如下圖所示:


      點(diǎn)擊右上方菜單“文件->安裝子圖庫(kù)”,如下圖所示:


      在彈出的文件選擇對(duì)話框中找到紫金橋安裝目錄下的Wizard文件夾,并選擇“ObXml.dll”文件,然后點(diǎn)擊“打開(kāi)”按鈕。


      然后在彈出的畫面中輸入名字“XML”,然后點(diǎn)擊“確定”按鈕,如下圖:


      這樣,XML組件就可以使用了。

      2、前期準(zhǔn)備

      創(chuàng)建一個(gè)窗口,命名為“win_main”。創(chuàng)建內(nèi)部對(duì)象:

      創(chuàng)建一個(gè)XML組件,命名為“w_xml”。

      創(chuàng)建一個(gè)按鈕,文本改成“讀取”。

      創(chuàng)建一個(gè)文本框,命名為“w_editFileName”。

      創(chuàng)建一個(gè)樹形控件,命名為“w_tree”。

      完成后的畫面:


      創(chuàng)建窗口,命名為“win_nodeProperty”,用于顯示結(jié)點(diǎn)信息,其內(nèi)部對(duì)象如下:

      創(chuàng)建四個(gè)文本框,分別命名為“w_edtName”、“w_edtKey”、“w_edtText”、“w_edtPath”。

      創(chuàng)建一個(gè)自由報(bào)表,命名為“w_frptAttrib”,設(shè)置為3列,列名為“屬性名”、“屬性文本”、“屬性key”。若干靜態(tài)文本,完成后的畫面如下圖所示:


      3、腳本邏輯

      l “讀取”按鈕中的腳本如下

      //載入文件:

      if !#win_xml.Load(#w_edtFileName.Text) then

      MsgBox("讀取文件失敗!");

      return;

      endif

      //XML信息顯示在樹形控件上:

      int nRoot = #win_xml.GetRootNode();

      string strKey = "";

      #win_tree.DeleteAllNode();

      if nRoot>0 then

      strKey = #win_tree.AddSubItemTail("","");

      fun_ToTree(nRoot,strKey);

      endif

      l fun_ToTree函數(shù)的聲明如下


      fun_ToTree函數(shù)體如下:

      //Function name: fun_ToTree

      int nNodeTemp = 0;

      string strNodeTemp = "";

      //設(shè)置樹控件結(jié)點(diǎn)文本:

      #win_tree.SetNodeTxt(strFatherKey, #win_xml.GetNodeName(nNode) + " (" + fun_GetAttribInfo(nNode) + ")");

      //XML結(jié)點(diǎn)標(biāo)識(shí)保存在對(duì)應(yīng)的樹控件結(jié)點(diǎn)中:

      #win_tree.SetNodeData(strFatherKey,nNode);

      nNodeTemp = #win_xml.GetFirstChildNode(nNode);

      while nNodeTemp>0 do

      //在樹控件上增加一個(gè)子結(jié)點(diǎn):

      strNodeTemp = #win_tree.AddSubItemTail(strFatherKey,"");

      //遞歸調(diào)用:

      fun_ToTree(nNodeTemp,strNodeTemp);

      nNodeTemp = #win_xml.GetNextNode(nNodeTemp);

      endwhile

      這個(gè)函數(shù)使用遞歸算法遍歷XML結(jié)點(diǎn)信息。

      l 進(jìn)入窗口腳本:

      OpenChild("win_nodeProperty");//打開(kāi)屬性信息窗口

      l 樹形控件腳本:

      打開(kāi)樹形控件屬性畫面,點(diǎn)擊“全局腳本”按鈕,在彈出的畫面中選擇“單擊腳本”,添加如下代碼:

      fun_onLbtnDown()

      fun_onLbtnDown()函數(shù)體如下:

      int nData = -1;

      if #win_tree.GetCurSelNodeKey()<>"" then

      nData = #win_tree.GetCurSelNodeData();

      //刷新屬性信息窗口:

      #win_nodeProperty.fun_ShowProperty(#win_xml,nData);

      endif

      fun_ShowProperty函數(shù)聲明:


      fun_ShowProperty函數(shù)體:

      #w_edtKey.Val = nNode;

      #w_edtName.Text = #pXml.GetNodeName(nNode);

      #w_edtText.Text = #pXml.GetNodeText(nNode);

      string strPath = "";

      int nNodeTemp = 0;

      string strS = AscToChar(47);//斜杠作為路徑分隔符

      //向上遍歷生成本結(jié)點(diǎn)的路徑名:

      nNodeTemp = nNode;

      strPath = #pXml.GetNodeName(nNode);

      while nNodeTemp>0 do

      <span style="font-style:italic;font-family:

      下一篇: PLC、DCS、FCS三大控

      上一篇: 索爾維全系列Solef?PV

      推薦產(chǎn)品

      更多
      主站蜘蛛池模板: 在线日产精品一区| 中文字幕日本一区| 日本中文字幕在线视频一区| 国产91一区二区在线播放不卡| 亚洲国产av一区二区三区丶| 无码成人一区二区| 538国产精品一区二区在线| 亲子乱av一区区三区40岁| 无码一区二区三区视频| 国产福利电影一区二区三区,免费久久久久久久精 | 中文字幕一区日韩精品| 美女视频在线一区二区三区| 无码av不卡一区二区三区| 国产一区二区三区四| 精品国产一区二区三区www| 蜜桃传媒一区二区亚洲AV| 韩国美女vip福利一区| 无码精品国产一区二区三区免费| 制服中文字幕一区二区| 中日韩一区二区三区| 国产成人精品无码一区二区三区| 中文字幕在线一区二区三区| 国产免费播放一区二区| 久久精品无码一区二区日韩AV | 亚洲无线码在线一区观看| 夜夜嗨AV一区二区三区| 国产一区三区三区| 激情综合丝袜美女一区二区| 亚洲欧美国产国产一区二区三区| 人妻AV中文字幕一区二区三区| 精品国产日产一区二区三区| 国产精华液一区二区区别大吗| 国精品无码一区二区三区在线蜜臀| 亚洲av片一区二区三区| 上原亚衣一区二区在线观看| 久久精品无码一区二区三区日韩| 国产另类ts人妖一区二区三区| 三上悠亚一区二区观看| 人妻少妇精品视频一区二区三区| 无码人妻精品一区二区三区99性| 另类国产精品一区二区|