繁体   English   中英

使用VB.net从XML提取数据

[英]Using VB.net extract data from XML

此XML文件每3秒钟不断更新。

  <?xml version="1.0" ?> 
- <MotePacket>
- <ParsedDataElement>
  <Name>amtype</Name> 
  <ConvertedValue>11</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>nodeid</Name> 
  <ConvertedValue>5164</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>parent</Name> 
  <ConvertedValue>0</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>group</Name> 
  <ConvertedValue>125</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>socketid</Name> 
  <ConvertedValue>51</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>board_id</Name> 
  <ConvertedValue>133</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>packet_id</Name> 
  <ConvertedValue>134</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>voltage</Name> 
  <ConvertedValue>2892</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>humid</Name> 
  <ConvertedValue>60</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>humtemp</Name> 
  <ConvertedValue>30</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>calibW0</Name> 
  <ConvertedValue>46920</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>calibW1</Name> 
  <ConvertedValue>64792</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>calibW2</Name> 
  <ConvertedValue>44770</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>calibW3</Name> 
  <ConvertedValue>47493</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>prtemp</Name> 
  <ConvertedValue>30.203907</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>press</Name> 
  <ConvertedValue>998.057495</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>taosch0</Name> 
  <ConvertedValue>65535</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>taosch1</Name> 
  <ConvertedValue>0</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>accel_x</Name> 
  <ConvertedValue>120.000000</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>accel_y</Name> 
  <ConvertedValue>100.000000</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>taoch0</Name> 
  <ConvertedValue>1840.229980</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>calibB0</Name> 
  <ConvertedValue>72</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>calibB1</Name> 
  <ConvertedValue>183</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>calibB2</Name> 
  <ConvertedValue>24</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>calibB3</Name> 
  <ConvertedValue>253</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>calibB4</Name> 
  <ConvertedValue>226</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>calibB5</Name> 
  <ConvertedValue>174</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>calibB6</Name> 
  <ConvertedValue>133</ConvertedValue> 
  </ParsedDataElement>
- <ParsedDataElement>
  <Name>calibB7</Name> 
  <ConvertedValue>185</ConvertedValue> 
  </ParsedDataElement>
  </MotePacket>

我需要一个不断读取该文件并提取以下数据的vb代码。 我该怎么做?

我只需要这个领域。

  • 节点ID
  • 湿
  • 谦卑
  • accel_x
  • accel_y

如果每个字段的值都超过某个读数,请执行(发送)我已经具有该功能。

感谢您的帮助。

Eric提供了一个很好的解决方案来检测文件更改,而在阅读XML(在链接的问题中)时未提及的另一种方法是:

    Dim ds As New DataSet
    ds.ReadXml("filename.xml")

    For Each row As DataRow In ds.Tables("ParsedDataElement").Rows
        Dim name As String = row("Name")
        If (name = "NodeID") Then
            ' Test row("ConvertedValue")
        ElseIf (name = "humid") Then
            ' Test row("ConvertedValue")
        End If
    Next

如果XML文件很大(例如MB范围),请避免使用此方法。 否则,这是提取XML数据的快速简便的方法。

我将使用File Watcher来接收有关文件已更新的通知,然后根据此SO问题对其进行处理

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM