XML(eXtensible Markup Language)是一種目前普遍使用的數據傳輸和存儲的格式,其本質上是一種文本文件,可使用任何一個文本編輯工具打開和修改。相似於HTML,XML被設計爲具備自我描述性,也是使用標籤訂義文檔的結構和含義。本文僅僅是介紹LabVIEW中對XML文件的操做方式和支持函數,關於XML語言自己能夠參見相關書籍和文檔,如W3school網站。 程序員
在測試測量領域中,XML文件一般被用來傳遞應用程序的配置文件和參數,這與ini文件的做用相似,也有很多的程序員將兩者進行對比。這裏舉個簡單的說明實例,說明對於ini和XML如何處理保存圖 17所示的儀器配置列表。該文件主要存儲各類儀器的參數信息,如name(名稱)、address(地址)、description(描述)。可是文件對各類儀器進行分類,根據儀器功能分爲AC Source、DC Source等。 express
圖 17 儀器配置列表實例 瀏覽器
對ini文件來講,表述圖 17所示的結構簡直就是一場「災難」,由於它僅僅是一種兩層的結構體系,沒法準確地表述這種多種的樹形結構。不管怎樣設計section和key,始終沒法知足條理清晰、結構簡單和檢索方便的要求。XML因爲其自己的多層次設計特色卻徹底可以勝任此類描述,以下所示。 ide
<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 函數
- <instruments> 工具
- <ACSource> 測試
- <instrument> 網站
<name>Instr1</name> spa
<address>GPIB::1</address> .net
<description>本儀器用於UUT1供電。</description>
</instrument>
- <instrument>
<name>Instr2</name>
<address>GPIB::2</address>
<description>本儀器用於UUT2供電。</description>
</instrument>
</ACSource>
- <DCSource>
- <instrument>
<name>Instr3</name>
<address>GPIB::3</address>
<description>本儀器用於UUT3供電。</description>
</instrument>
- <instrument>
<name>Instr4</name>
<address>GPIB::4</address>
<description>本儀器用於UUT4供電。</description>
</instrument>
</DCSource>
- <DMM>
- <instrument>
<name>Instr5</name>
<address>GPIB::5</address>
<description>測量1-10#點電壓。</description>
</instrument>
</DMM>
- <DAQ>
- <instrument>
<name>Instr6</name>
<address>GPIB::6</address>
<description>監控11-12#電壓。</description>
</instrument>
</DAQ>
</instruments>
在瀏覽器中(IE、Firefox等)打開該XML文件,能夠看到其樹形的結構,很是吻合圖 17所示的要求。當須要擴展儀器或類型時,只要增長相應的元素節點便可。所以,相對ini文件,XML文件在描述比較複雜的文檔結構時具備很是明顯的優點。
LabVIEW提供了兩類處理XML文件的VIs,如圖 18所示,依次爲LabVIEW Schema和XML Parser。前者是將LabVIEW中產生的相關數據,如waveform、string、array、cluster等按照內置的XML Schema(XSD)文件產生符合XML驗證的XML字符串;後者是使用XML DOM對象訪問和解析XML文件。
圖 18 XML函數選板
圖 19所示爲LabVIEW Schema函數選板中的函數列表,其功能很是清晰明瞭。
(1) Flatten To XML:將LabVIEW中的數據轉化爲符合XML語言規範的XML字符串。這種轉換是根據預約義的XML Schema文件實現的,默認路徑爲<LabVIEW>\vi.lib\Utility\LVXMLSchema.xsd。目前LabVIEW並不支持自定義的XML Schema,也不支持LabVIEW對某個數據的自定義標記。
(2) Unflatten From XML:這是與Flatten To XML做用相反的函數,它根據XML Schema將XML字符串轉化爲LabVIEW可識別的數據類型。
(3) Write to XML File:將XML字符串寫入XML文件中。
(4) Read From XML File:從XML文件中讀取XML字符串。
(5) Escape XML:將特殊字符串轉換爲符合XML語法的字符。它能夠將<、>、&、'、"轉換爲<、>、&、'、"。
(6) Unescape XML:與Escape XML函數的功能相反。
圖 19 LabVIEW Schema函數選板
圖 20是利用圖 19所示的函數將LabVIEW中產生的數據轉換爲XML字符串並寫入XML文件中。LabVIEW會自動根據XSD文件將double、string和cluster數據轉換爲XML字符串,而程序員沒法自定義轉換的具體方式和內容。
圖 20 將LabVIEW數據類型轉換爲XML文件
將XML文件中的字符串轉換爲LabVIEW中的數據類型,只須要使用LabVIEW Schema中的函數就能夠了,如圖 21所示。
圖 21 將XML文件轉換爲LabVIEW數據類型
從圖 19 ~ 圖 21能夠看出,將LabVIEW中的相關數據轉換爲對應的XML字符串比較簡單。可是在LabVIEW中程序員如何可以解析非LabVIEW生成的XML文檔呢?如何獲取任何一個XML文件中的XML元素和屬性呢?LabVIEW中使用Xerces 2.7解析器處理XML文檔,它須要使用到XML DOM(Document Object Model,文檔對象模型),該對象模型主要是定義了一套訪問和操做XML文檔的標準方法。
圖 22 XML Parse函數選板
本文將使用LabVIEW中的解析器解析圖 17所示的XML文件,如圖 23所示(下載)。本例但願讀取全部的AC Source儀器配置信息,首先使用Load.vi函數打開XML文件,獲得DOM Document指針;而後,使用Get First Matched Node.vi函數搜索XML文件中的ACSource元素,並獲得該節點的指針;使用ChildNodesArray獲取ACSource元素下全部的一級子元素,即instrument元素列表;而後依次獲取Instrument元素中的各個子元素的文本值;最後,使用Close.vi關閉打開的節點。從圖中能夠看出,當ACSource元素中增長了新的儀器時,該讀取VI不須要任何修改,很是易於擴展。
圖 23 解析XML文件
須要說明的是,Get First Matched Node.vi函數XPath expression參數表示經過XPath語法定義的表達式,目前LabVIEW支持World Wide Web Consortium (W3C)制定的XPath 1.0。關於XPath的相關知識,能夠參見W3C的網站或W3school網站。經過XPath語法,程序員能夠很是方便地獲取某個具體的元素節點。圖 24使用XPath表達式直接獲取了XML文件中DMM元素下第1個儀器的地址值。
圖 24 使用XPath表達式獲取address元素值
事實上,XML自己就是一門內涵豐富的語言,程序員可使用它存儲和傳輸具備複雜結構的數據。雖然XML在不少方面都優於ini文件,可是ini文件因爲其便捷的操做性仍然被大量用於應用程序的配置應用中。