[英]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代码。 我该怎么做?
我只需要这个领域。
如果每个字段的值都超过某个读数,请执行(发送)我已经具有该功能。
感谢您的帮助。
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.