LabVIEW数据记录和存储-XML

可紊 提交于 2020-05-01 04:49:30

XMLeXtensible Markup Language)是一种目前广泛使用的数据传输和存储的格式,其本质上是一种文本文件,可以使用任何一个文本编辑工具打开和修改。类似于HTMLXML被设计为具有自我描述性,也是使用标签定义文档的结构和含义。本文仅仅是介绍LabVIEW中对XML文件的操作方式和支持函数,关于XML语言本身可以参见相关书籍和文档,如W3school网站

在测试测量领域中,XML文件通常被用来传递应用程序的配置文件和参数,这与ini文件的作用类似,也有不少的程序员将二者进行对比。这里举个简单的说明实例,说明对于iniXML如何处理保存 17所示的仪器配置列表。该文件主要存储各种仪器的参数信息,如name(名称)、address(地址)、description(描述)。但是文件对各种仪器进行分类,根据仪器功能分为AC SourceDC Source等。

LabVIEW数据记录和存储(四)—XML文件 - statemice - Change, We Need!

17 仪器配置列表实例

ini文件来说,表述 17所示的结构简直就是一场“灾难”,因为它仅仅是一种两层的结构体系,无法准确地表述这种多种的树形结构。无论怎样设计sectionkey,始终无法满足条理清晰、结构简单和检索方便的要求。XML由于其本身的多层次设计特点却完全能够胜任此类描述,如下所示。

  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>

- <instruments>

- <ACSource>

- <instrument>

  <name>Instr1</name>

  <address>GPIB::1</address>

  <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>

在浏览器中(IEFirefox等)打开该XML文件,可以看到其树形的结构,非常吻合 17所示的要求。当需要扩展仪器或类型时,只要增加相应的元素节点即可。因此,相对ini文件,XML文件在描述比较复杂的文档结构时具有非常明显的优势。

LabVIEW提供了两类处理XML文件的VIs,如 18所示,依次为LabVIEW SchemaXML Parser。前者是将LabVIEW中产生的相关数据,如waveformstringarraycluster等按照内置的XML SchemaXSD)文件产生符合XML验证的XML字符串;后者是使用XML DOM对象访问和解析XML文件。

LabVIEW数据记录和存储(四)—XML文件 - statemice - Change, We Need!

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 SchemaXML字符串转化为LabVIEW可识别的数据类型。

(3)     Write to XML File:将XML字符串写入XML文件中。

(4)     Read From XML File:从XML文件中读取XML字符串。

(5)     Escape XML:将特殊字符串转换为符合XML语法的字符。它可以将<>&'"转换为&lt;&gt;&amp;&apos;&quot;

(6)     Unescape XML:与Escape XML函数的功能相反。

LabVIEW数据记录和存储(四)—XML文件 - statemice - Change, We Need!

19 LabVIEW Schema函数选板

20是利用 19所示的函数将LabVIEW中产生的数据转换为XML字符串并写入XML文件中。LabVIEW会自动根据XSD文件将doublestringcluster数据转换为XML字符串,而程序员无法自定义转换的具体方式和内容。

LabVIEW数据记录和存储(四)—XML文件 - statemice - Change, We Need!

20 LabVIEW数据类型转换为XML文件

XML文件中的字符串转换为LabVIEW中的数据类型,只需要使用LabVIEW Schema中的函数就可以了,如 21所示。

LabVIEW数据记录和存储(四)—XML文件 - statemice - Change, We Need!

21 XML文件转换为LabVIEW数据类型

19 ~ 21可以看出,将LabVIEW中的相关数据转换为对应的XML字符串比较简单。但是在LabVIEW中程序员如何能够解析非LabVIEW生成的XML文档呢?如何获取任何一个XML文件中的XML元素和属性呢?LabVIEW中使用Xerces 2.7解析器处理XML文档,它需要使用到XML DOMDocument Object Model,文档对象模型),该对象模型主要是定义了一套访问和操作XML文档的标准方法。

LabVIEW数据记录和存储(四)—XML文件 - statemice - Change, We Need!

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不需要任何修改,非常易于扩展。

LabVIEW数据记录和存储(四)—XML文件 - statemice - Change, We Need!

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个仪器的地址值。

LabVIEW数据记录和存储(四)—XML文件 - statemice - Change, We Need!

24 使用XPath表达式获取address元素值

事实上,XML本身就是一门内涵丰富的语言,程序员可以使用它存储和传输具有复杂结构的数据。虽然XML在很多方面都优于ini文件,但是ini文件由于其便捷的操作性仍然被大量用于应用程序的配置应用中。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!