在XML文件VB.net中查找属性值

时间:2016-05-29 07:51:07

标签: xml vb.net

我有以下详细信息,包括xml文件。

<?xml version="1.0" encoding="utf-8"?>
<LoadSurveyValues>
  <LoadSurvey timeStamp="18/12/2015 11:13:02" saveMode="SnapShot">
    <Date Date="18/12/2015 00:00:00">
      <ParamValues Type="ActiveTotalImport" Unit="kWh">
        <SipValues Time="00:15" ParamValue="0" />
        <SipValues Time="00:30" ParamValue="0" />
        <SipValues Time="00:45" ParamValue="0" />
        <SipValues Time="01:00" ParamValue="0" />
        <SipValues Time="01:15" ParamValue="0.5" />
        <SipValues Time="01:30" ParamValue="0.1" />
        <SipValues Time="01:45" ParamValue="0" />
        <SipValues Time="02:00" ParamValue="0" />
        <SipValues Time="02:15" ParamValue="0" />
        <SipValues Time="02:30" ParamValue="0" />

等等

我想在“Date”日期18/12/2015找到“ParamValue”属性值,“ParamValues”类型为ActiveTotalImport“和”SipValue“时间01:15。该结果应为0.5。

这些是我在VB.net中使用列表框尝试的代码。

  Dim xr As XmlReader = XmlReader.Create("meter 01.xml")
  If ListBox1.SelectedIndex >= 0 Then
        If ListBox2.SelectedIndex >= 0 Then
            If ListBox3.SelectedIndex >= 0 Then

                If xr.NodeType = XmlNodeType.Element And xr = ListBox1.SelectedIndex And xr = ListBox2.SelectedIndex And xr = ListBox3.SelectedIndex Then

                    ListBox4.Items.Add(xr.GetAttribute(1))

                End If
            End If
        End If
    End If

ListBox1选择了18/12/2015 00:00:00值,ListBox2选择了ActiveTotalImport值,ListBox3选择了01:15值。因此结果是向ListBox4添加0.5值。但是这段代码不起作用请帮我解决一下

1 个答案:

答案 0 :(得分:0)

试试xml linq

Imports System.Xml
Imports System.Xml.Linq
Module Module1
    Const FILENAME As String = "c:\temp\test.xml"
    Sub Main()
        Dim doc As XDocument = XDocument.Load(FILENAME)

        Dim survey As XElement = doc.Descendants("LoadSurvey").Where(Function(x) x.Attribute("timeStamp").Value = "18/12/2015 11:13:02").FirstOrDefault()
        Dim ParamValue As String = survey.Descendants("SipValues").Where(Function(x) x.Attribute("Time").Value = "01:15").Select(Function(y) y.Attribute("ParamValue")).FirstOrDefault()
    End Sub

End Module
相关问题