获取XML存档的值

时间:2014-07-28 17:27:11

标签: xml vb.net

我有一个问题。我正在尝试获取XML存档的一些值。现在我可以列出其中的大多数,但是当涉及最后2个节点时我遇到了问题,我总是得到第一个节点的第一个子节点。例如

<TipoSaldo CodTipoSaldo="1" Descripción="Principal">
      <Saldos>
        <Plazos>
          <Plazo Código="0" Descripción="Muy corto plazo">
            <Saldo CodEntidad="100" Instrumento="BEMSM" CodMoneda="30" Principal="100000" EjercicioAnterior="0.0000" EjercicioCorriente="0.0000" />
          </Plazo>
          <Plazo Código="2" Descripción="Mediano plazo">
            <Saldo CodEntidad="100" Instrumento="BEMV" CodMoneda="1" Principal="563870500000.0000" EjercicioAnterior="0.0000" EjercicioCorriente="0.0000" />
          </Plazo>
        </Plazos>
      </Saldos>
</TipoSaldo>

我可以看到行 Saldo CodEntidad =“100”Instrumento =“BEMSM”的值,但是当我尝试在另一个上获取同一行的for cicle的值时node Saldo CodEntidad =“100”Instrumento =“BEMV”我一直得到第一个节点的相同值 Saldo CodEntidad =“100”Instrumento =“BEMSM”...... 而不是 Saldo CodEntidad =“100”Instrumento =“BEMV”......

这是我得到值

的主要代码部分
    'Iniciamos el ciclo de lectura
    For index = 0 To contador

        'Obtenemos el valor del codigo servicio
        Dim mServicio = elementos.FirstChild.ChildNodes.ItemOf(index).Attributes.GetNamedItem("CodServicio").Value
        list.Add(mServicio)

        'segundo contador para recorrer el nodo de tipo saldo
        Dim contador2 = elementos.FirstChild.FirstChild.FirstChild.ChildNodes.Count - 1

        For index2 = 0 To contador2

            'nodo Ej: <TipoSaldo CodTipoSaldo="" Descripción="">
            'obtenemos valores anteriores
            Dim mCodigoTipoSaldo = elementos.FirstChild.FirstChild.FirstChild.ChildNodes.ItemOf(index2).Attributes.GetNamedItem("CodTipoSaldo").Value
            Dim mDescTipoSaldo = elementos.FirstChild.FirstChild.FirstChild.ChildNodes.ItemOf(index2).Attributes.GetNamedItem("Descripción").Value
            list.Add(mCodigoTipoSaldo)
            list.Add(mDescTipoSaldo) 'agregamos datos a la lista

            'tercer contador para el nodo de plazos
            Dim contador3 = elementos.FirstChild.FirstChild.FirstChild.FirstChild.FirstChild.FirstChild.ChildNodes.Count - 1

            For index3 = 0 To contador3

                'nodo Ej: <Plazo Código="" Descripción="">
                Dim mCodigoTipoPlazo = elementos.FirstChild.FirstChild.FirstChild.FirstChild.FirstChild.FirstChild.ChildNodes.ItemOf(index3).Attributes.GetNamedItem("Código").Value
                Dim mDescTipoPlazo = elementos.FirstChild.FirstChild.FirstChild.FirstChild.FirstChild.FirstChild.ChildNodes.ItemOf(index3).Attributes.GetNamedItem("Descripción").Value
                list.Add(mCodigoTipoPlazo)
                list.Add(mDescTipoPlazo) 'agregamos datos a la lista

                'cuarto contador para nodo final de saldos
                Dim contador4 = elementos.FirstChild.FirstChild.FirstChild.FirstChild.FirstChild.FirstChild.FirstChild.ChildNodes.Count - 1

                Dim item As New Object 'creo un nuevo objeto para agregar a la lista y que no se repitan valores

                For index4 = 0 To contador4
                    'nodo Ej: <Saldo CodEntidad="100" Instrumento="BEMSM" ... EjercicioCorriente="0.0000" />
                    Dim mSaldoInstrumento = elementos.FirstChild.FirstChild.FirstChild.FirstChild.FirstChild.FirstChild.FirstChild.ChildNodes.ItemOf(index4).Attributes.GetNamedItem("Instrumento").Value
                    Dim mSaldoPrincipal = elementos.FirstChild.FirstChild.FirstChild.FirstChild.FirstChild.FirstChild.FirstChild.ChildNodes.ItemOf(index4).Attributes.GetNamedItem("Principal").Value
                    Dim mEjercicioCorriente = elementos.FirstChild.FirstChild.FirstChild.FirstChild.FirstChild.FirstChild.FirstChild.ChildNodes.ItemOf(index4).Attributes.GetNamedItem("EjercicioCorriente").Value

                    list.Add(mSaldoInstrumento)
                    list.Add(mSaldoPrincipal)
                    list.Add(mEjercicioCorriente) 'agregamos valores a la lista

                Next

                Console.Write(" Tipo Plazo: " & mCodigoTipoPlazo _
                & " Descripcion Tipo Plazo: " & mDescTipoPlazo _
                )

            Next

任何帮助或想法都是完美的! 非常感谢!

1 个答案:

答案 0 :(得分:0)

如果您的XML格式正确,那么您可以使用

至少可以节省很多.FirstChild.FirstChild

希望它有所帮助!