none
Guardar atributos de un XML en variables VB.NET RRS feed

  • Debate general

  • Buen día, 

    Tengo un archivo XML del siguiente formato:

    <METER>

        <MeterReadings Irn="331" Source="Remote" SourceName="Meter1" SourceIrn="2" Initiator="Schedule" Purpose="Billing" CollectionTime="2017-04-12 14:42:20">       <Meter MeterIrn="331" MeterName="MeterDemo" IsActive="true" SerialNumber="11111111" MeterType="Demo" Description="Meter of demo" InstallDate="2016-10-04 03:00:00" RemovalDate="" AccountIdent="Account1" AccountName="Name" SdpIdent="Read1" Location="City1"/>

            <ConsumptionData>

                <ConsumptionSpec UOM="kWh" Direction="Delivered" TouBucket="Total" MeasurementPeriod="Current" Multiplier="1" />

                <Reading TimeStamp="2017-04-10 11:14:00" Value="13623" />

            </ConsumptionData>

            <ConsumptionData>

                <ConsumptionSpec UOM="kVARh" Direction="Q1" TouBucket="Total" MeasurementPeriod="Current" Multiplier="1" />

                <Reading TimeStamp="2017-04-10 11:14:00" Value="11807" />

            </ConsumptionData>

            <ConsumptionData>

                <ConsumptionSpec UOM="kWh" Direction="Delivered" TouBucket="TierA" MeasurementPeriod="Current" Multiplier="1" />

                <Reading TimeStamp="2017-04-10 11:14:00" Value="0" />

            </ConsumptionData>

            <ConsumptionData>

                <ConsumptionSpec UOM="kVARh" Direction="Q1" TouBucket="TierA" MeasurementPeriod="Current" Multiplier="1" />

                <Reading TimeStamp="2017-04-10 11:14:00" Value="0" />

            </ConsumptionData>

            <ConsumptionData>

                <ConsumptionSpec UOM="kWh" Direction="Delivered" TouBucket="TierB" MeasurementPeriod="Current" Multiplier="1" />

            <InstrumentationValue Name="Voltage" Phase="A" Value="224" Timestamp="2017-04-10 11:14:00" />

            <InstrumentationValue Name="Voltage" Phase="B" Value="227" Timestamp="2017-04-10 11:14:00" />

            <InstrumentationValue Name="Voltage" Phase="C" Value="224" Timestamp="2017-04-10 11:14:00" />

            <DemandResetCount UOM="Times" TimeStamp="2017-04-10 11:14:00" Count="0" />

        </MeterReadings>

    </METER> 

    He intentado guardar los valores de los atributos MeterIrn, MeterName, IsActive, SerialNumber, MeterType, Description, InstallDate, AccountIdent, AccountName, SdpIdent, Location, UOM, Direction, TouBucket, MeasurementPeriod, Multiplier, TimeStamp, Value.  pero no tuve exito con las clases ReadInnerXml de la clase XmlReader. Mi idea es guardar todas estos datos en variables e ir cargandolas a medida que se vayan cargando en una base de datos SQL Server. Alguna idea para poder obtener los datos de los atributos antes mencionados? Estoy utilizando el siguiente código para intentar hacer esto:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Try
                Using reader As XmlReader = XmlReader.Create("C:\File.xml")
                    Dim a As String
                    reader.MoveToContent()
                    reader.ReadToDescendant("MeterReadings")
                    reader.ReadToDescendant("Meter")
                    a = reader.ReadInnerXml()
                    My.Computer.FileSystem.WriteAllText(My.Computer.FileSystem.CurrentDirectory & "demo.txt", a & vbNewLine, True)
                End Using
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try

    Gracias y saludos


    jueves, 8 de junio de 2017 13:47

Todas las respuestas

  • has intentado usar Linq..??

    pues para obtener los datos de un archivo xml  con linq es super que facil

    Dim datofactura = XElement.Parse(resultado)
                factura.Document.Add(datofactura)
                Dim InfoTributaria = From datos2 In factura...<infoTributaria> _
                Select Ruc = datos2.<ruc>.Value, tipodoc = datos2.<codDoc>.Value, razonSocial = datos2.<razonSocial>.Value, establecimiento = datos2.<estab>.Value, ptoEmision = datos2.<ptoEmi>.Value, secuencial = datos2.<secuencial>.Value
                For Each dato2 In InfoTributaria
                    DataGridView1.Rows.Add(dato2.Ruc, dato2.tipodoc, dato2.razonSocial, dato2.establecimiento, dato2.ptoEmision, dato2.secuencial, "", AUTORIZACION)
                Next
                Dim InfoFactura = From datofact In factura...<infoFactura> _
                Select FechaEmi = datofact.<fechaEmision>.Value, Baseimp = datofact...<baseImponible>.Value, iva = datofact...<valor>.Value
                For Each dato3 In InfoFactura
                    DataGridView1.Rows(contador).Cells("DgvcFechaEmision").Value = dato3.FechaEmi
                Next
    aqui paso una parte de codigo linq que uso en visual basic para obtener los datos de una factura electronica los cuales los coloco en un datagridview si quieres puedes ponerlos en variables de tipo array y si son unicos pues puedes colocarlos solo en variables
    sábado, 10 de junio de 2017 22:38