我有一个问题。我正在尝试获取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
任何帮助或想法都是完美的! 非常感谢!
答案 0 :(得分:0)
如果您的XML格式正确,那么您可以使用
至少可以节省很多.FirstChild.FirstChild
希望它有所帮助!