產品分類

      當前位置: 首頁 >

      類型分類:
      科普知識
      數據分類:

      紫金橋軟件讀寫XML文件

      發布日期:2022-04-26 點擊率:78

      • 關鍵詞:                                                                紫金橋軟件                                                                讀寫XML文件                                                                XML

      • 摘要:XML又名“可擴展標記語言”,它提供統一的方法來描述和交換獨立于應用程序或供應商的結構化數據。這種統一性使得不同的軟件之間擁有一座通訊橋梁。XML廣泛應用于自動控制領域,因此在使用不同編程語言、組態工具時經常需要解析XML格式文件。本文講述如何使用紫金橋軟件來讀取XML文件。


      一、概述

      XML又名“可擴展標記語言”,它提供統一的方法來描述和交換獨立于應用程序或供應商的結構化數據。這種統一性使得不同的軟件之間擁有一座通訊橋梁。XML廣泛應用于自動控制領域,因此在使用不同編程語言、組態工具時經常需要解析XML格式文件。本文講述如何使用紫金橋軟件來讀取XML文件。

      二、ObXml組件簡介

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

      ObXml組件用于解析或生成XML文件。使用Load函數載入XML文件或直接創建XML文件后,所有關于文件的修改操作都是針對內存數據的修改,在使用Save函數或SaveAs函數之后才會將修改的結果保存至硬盤。

      每個XML結點以及結點屬性均對應一個整型標識號,標識號是在組件讀取XML(新建XML)后動態生成的,作為執行組件各種操作函數的參數以定位結點或結點屬性。因為標識號是動態生成的,并非XML文件自帶信息,每次使用組件打開(或新建)XML文件時同一結點的標識號可能會不同,因此它只能在運行時臨時獲取并使用,當組件關閉后,這些標識將失去意義。

      組件實現的功能:

      1)讀取已存在的XML文件,遍歷所有結點,讀寫結點名字、結點文本、結點屬性,讀寫聲明語句。

      2)創建新的XML文件并保存。

      注意事項:

      1)無法讀取或寫入XML文件中的注釋語句。

      2)能夠識別UTF-8GBKANSI編碼格式。無法識別UnicodeUnicode big endian編碼格式。

      三、工程示例

      制作一個可以讀取XML文件的工程,主畫面包含兩部分:左側為一個樹形控件,用于顯示所有XML結點;右側為一個結點屬性窗口,當點擊樹形控件上的不同結點時,屬性窗口顯示對應結點的所有信息:結點名、結點文本、結點標識、結點路徑、屬性列表,其中屬性列表包含每個屬性的屬性名、屬性文本、屬性標識。效果圖如下:


      1引入組件

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

      在組態界面打開子圖選擇畫面,在左側選擇“windows控件”一項,如下圖所示:


      點擊右上方菜單“文件->安裝子圖庫”,如下圖所示:


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


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


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

      2前期準備

      創建一個窗口,命名為“win_main”。創建內部對象:

      創建一個XML組件,命名為“w_xml”。

      創建一個按鈕,文本改成“讀取”。

      創建一個文本框,命名為“w_editFileName”。

      創建一個樹形控件,命名為“w_tree”。

      完成后的畫面:


      創建窗口,命名為“win_nodeProperty”,用于顯示結點信息,其內部對象如下:

      創建四個文本框,分別命名為“w_edtName”、“w_edtKey”、“w_edtText”、“w_edtPath”。

      創建一個自由報表,命名為“w_frptAttrib”,設置為3列,列名為“屬性名”、“屬性文本”、“屬性key”。若干靜態文本,完成后的畫面如下圖所示:


      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函數的聲明如下


      fun_ToTree函數體如下:

      //Function name: fun_ToTree

      int nNodeTemp = 0;

      string strNodeTemp = "";

      //設置樹控件結點文本:

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

      //XML結點標識保存在對應的樹控件結點中:

      #win_tree.SetNodeData(strFatherKey,nNode);

      nNodeTemp = #win_xml.GetFirstChildNode(nNode);

      while nNodeTemp>0 do

      //在樹控件上增加一個子結點:

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

      //遞歸調用:

      fun_ToTree(nNodeTemp,strNodeTemp);

      nNodeTemp = #win_xml.GetNextNode(nNodeTemp);

      endwhile

      這個函數使用遞歸算法遍歷XML結點信息。

      l 進入窗口腳本:

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

      l 樹形控件腳本:

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

      fun_onLbtnDown()

      fun_onLbtnDown()函數體如下:

      int nData = -1;

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

      nData = #win_tree.GetCurSelNodeData();

      //刷新屬性信息窗口:

      #win_nodeProperty.fun_ShowProperty(#win_xml,nData);

      endif

      fun_ShowProperty函數聲明:


      fun_ShowProperty函數體:

      #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);//斜杠作為路徑分隔符

      //向上遍歷生成本結點的路徑名:

      nNodeTemp = nNode;

      strPath = #pXml.GetNodeName(nNode);

      while nNodeTemp>0 do

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

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

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

      推薦產品

      更多
      主站蜘蛛池模板: 成人一区专区在线观看| 人妻无码久久一区二区三区免费 | 日韩一区二区三区射精| 日韩一区二区三区在线观看| 狠狠色综合一区二区| 人妻少妇AV无码一区二区| 国产精品无码一区二区三区在 | 色综合久久一区二区三区| 亚洲午夜在线一区| 久久久精品一区二区三区| 国产午夜精品一区二区三区小说 | 红杏亚洲影院一区二区三区| 国产精品亚洲一区二区三区久久| 国模私拍福利一区二区| 在线视频一区二区| 无码毛片视频一区二区本码 | 久久一区二区三区免费播放| 亚洲一区二区三区国产精品| 人妻内射一区二区在线视频| 精品国产一区二区三区免费看| 日本一区二区三区免费高清| 在线精品视频一区二区| 中文字幕av一区| 久久久国产精品无码一区二区三区 | 久久久无码精品国产一区| 九九久久99综合一区二区| 国产精品高清一区二区三区| 亚洲AV日韩AV天堂一区二区三区 | 一区二区中文字幕在线观看| 麻豆精品久久久一区二区| 少妇无码AV无码一区| 精品一区二区三区四区| 亚洲一区二区三区免费观看| 无码一区二区三区爆白浆| 国产萌白酱在线一区二区| 久久99精品免费一区二区| 日韩一区二区久久久久久| 国产精品视频一区二区三区| 国产成人精品无码一区二区老年人 | 国产成人无码一区二区三区在线| 精品日产一区二区三区手机|