LabVIEW數(shù)據(jù)記錄和存儲(chǔ)(四)—XML文件
- Flatten To XML:將LabVIEW中的數(shù)據(jù)轉(zhuǎn)化為符合XML語(yǔ)言規(guī)范的XML字符串。這種轉(zhuǎn)換是根據(jù)預(yù)定義的XML Schema文件實(shí)現(xiàn)的,默認(rèn)路徑為
vi.libUtilityLVXMLSchema.xsd。目前LabVIEW并不支持自定義的XML Schema,也不支持LabVIEW對(duì)某個(gè)數(shù)據(jù)的自定義標(biāo)記。 - Unflatten From XML:這是與Flatten To XML作用相反的函數(shù),它根據(jù)XML Schema將XML字符串轉(zhuǎn)化為L(zhǎng)abVIEW可識(shí)別的數(shù)據(jù)類型。
- Write to XML File:將XML字符串寫(xiě)入XML文件中。
- Read From XML File:從XML文件中讀取XML字符串。
- Escape XML:將特殊字符串轉(zhuǎn)換為符合XML語(yǔ)法的字符。它可以將<、>、&、、"轉(zhuǎn)換為、>、、'、。
- Unescape XML:與Escape XML函數(shù)的功能相反。
圖 19 LabVIEW Schema函數(shù)選板
圖 20是利用圖 19所示的函數(shù)將LabVIEW中產(chǎn)生的數(shù)據(jù)轉(zhuǎn)換為XML字符串并寫(xiě)入XML文件中。LabVIEW會(huì)自動(dòng)根據(jù)XSD文件將double、string和cluster數(shù)據(jù)轉(zhuǎn)換為XML字符串,而程序員無(wú)法自定義轉(zhuǎn)換的具體方式和內(nèi)容。
圖 20 將LabVIEW數(shù)據(jù)類型轉(zhuǎn)換為XML文件
將XML文件中的字符串轉(zhuǎn)換為L(zhǎng)abVIEW中的數(shù)據(jù)類型,只需要使用LabVIEW Schema中的函數(shù)就可以了,如圖 21所示。
圖 21 將XML文件轉(zhuǎn)換為L(zhǎng)abVIEW數(shù)據(jù)類型
從圖 19 ~ 圖 21可以看出,將LabVIEW中的相關(guān)數(shù)據(jù)轉(zhuǎn)換為對(duì)應(yīng)的XML字符串比較簡(jiǎn)單。但是在LabVIEW中程序員如何能夠解析非LabVIEW生成的XML文檔呢?如何獲取任何一個(gè)XML文件中的XML元素和屬性呢?LabVIEW中使用Xerces 2.7解析器處理XML文檔,它需要使用到XML DOM(Document Object Model,文檔對(duì)象模型),該對(duì)象模型主要是定義了一套訪問(wèn)和操作XML文檔的標(biāo)準(zhǔn)方法。
圖 22 XML Parse函數(shù)選板
本文將使用LabVIEW中的解析器解析圖 17所示的XML文件,如圖 23所示(下載)。本例希望讀取所有的AC Source儀器配置信息,首先使用Load.vi函數(shù)打開(kāi)XML文件,得到DOM Document指針;然后,使用Get First Matched Node.vi函數(shù)搜索XML文件中的ACSource元素,并得到該節(jié)點(diǎn)的指針;使用ChildNodesArray獲取ACSource元素下所有的一級(jí)子元素,即instrument元素列表;然后依次獲取Instrument元素中的各個(gè)子元素的文本值;最后,使用Close.vi關(guān)閉打開(kāi)的節(jié)點(diǎn)。從圖中可以看出,當(dāng)ACSource元素中增加了新的儀器時(shí),該讀取VI不需要任何修改,非常易于擴(kuò)展。
圖 23 解析XML文件
需要說(shuō)明的是,Get First Matched Node.vi函數(shù)XPath expr
圖 24 使用XPath表達(dá)式獲取address元素值
事實(shí)上,XML本身就是一門內(nèi)涵豐富的語(yǔ)言,程序員可以使用它存儲(chǔ)和傳輸具有復(fù)雜結(jié)構(gòu)的數(shù)據(jù)。雖然XML在很多方面都優(yōu)于ini文件,但是ini文件由于其便捷的操作性仍然被大量用于應(yīng)用程序的配置應(yīng)用中。
評(píng)論