使用VB.net从XML中提取数据

时间:2009-09-24 02:15:01

标签: xml vb.net

此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
  • 湿润
  • humtemp
  • accel_x
  • accel_y

如果每个字段的值超过某个读数,请执行(发送) 我已经感觉到了感觉......

感谢您的帮助..

2 个答案:

答案 0 :(得分:1)

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数据提取方式。

答案 1 :(得分:0)

我会使用File Watcher来接收文件已更新的通知,然后根据this SO question对其进行处理。