** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Excel
  Mensajes nuevos Mensajes nuevos RSS - XML función damevalor1
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

XML función damevalor1

 Responder Responder
Autor
Mensaje
SkaryBlondi Ver desplegable
Habitual
Habitual


Unido: 24/Octubre/2020
Localización: Asturias
Estado: Sin conexión
Puntos: 89
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita SkaryBlondi Cita  ResponderRespuesta Enlace directo a este mensaje Tema: XML función damevalor1
    Enviado: 05/Octubre/2021 a las 15:55
Buenas tardes

Por diversas cuestiones tengo que trabajar últimamente con muchos ficheros XML para lo cual las funciones sobre el tratamiento de los citados ficheros de Mihura me han ayudado mucho.

Me he encontrado un problema, que he resuelto y os traslado, por si te es de utilidad a otros miembros del foro.

Con la siguiente función

Function DameValor1(ByRef Nodo As MSXML2.IXMLDOMNode, Valor As String) As String
Dim xmlSingleNode As MSXML2.IXMLDOMNode

' esta funcion selecciona el primer nodo del NODO que se le pasa como argumento y que cumple el valor
' que se le pasa y devuelve el atributo texto del mismo, es decir el valor
' no se puede usar para los items que se repiten porque solo veríamos el primero e ignoraríamos el resto
    Set xmlSingleNode = Nodo.SelectSingleNode(Valor)
    If Not xmlSingleNode Is Nothing Then
        DameValor1 = xmlSingleNode.Text
    End If
    Set xmlSingleNode = Nothing
    Debug.Print DameValor1
End Function


Se recuperan los diversos datos de los nodos, pero en la ayuda de la función se indica lo siguiente "no se puede usar para los items que se repiten porque solo veríamos el primero e ignoraríamos el resto"

Me he encontrato con la necesidad de tratar ficheros XML de pago de cheques con carta donde las diversas líneas se indican con la etiqueta Ustrd y solo obtenía la primera línea del documento.

Después de darle unas cuantas vueltas se me ocurrió dejar en una variable el contenido de la etiqueta del nivel anterior RmtInf y bingo, me depositó concatenada en una sola variable el contenido de todas las etiquetas Ustrd contenidas y luego solo tuve que trocear la cadena para mis fines.

            <CdtTrfTxInf>
                <PmtId>
                    <InstrId>A11111118</InstrId>
                    <EndToEndId>A11111118</EndToEndId>
                </PmtId>
                <Amt>
                    <InstdAmt Ccy="EUR">000000001.00</InstdAmt>
                </Amt>
                <ChqInstr>
                    <ChqTp>BCHQ</ChqTp>
                    <DlvryMtd>
                        <Cd>PUDB</Cd>
                    </DlvryMtd>
                    <PrtLctn>111</PrtLctn>
                </ChqInstr>
                <Cdtr>
                    <Nm>NOMBRE PROVEEDOR</Nm>
                    <PstlAdr>
                        <Ctry>ES</Ctry>
                        <AdrLine>CL DEL OLVIDO 68-2-N</AdrLine>
                        <AdrLine>33013 OVIEDO</AdrLine>
                    </PstlAdr>
                </Cdtr>
                <RmtInf>
                    <Ustrd>una lnea del documento</Ustrd>
                    <Ustrd>otra linea del documento</Ustrd>
                    <Ustrd>otra linea del documento</Ustrd>
                    <Ustrd>otra linea del documento</Ustrd>
                    <Ustrd>otra linea del documento</Ustrd>
                    <Ustrd>otra linea del documento</Ustrd>
                    <Ustrd>otra linea del documento</Ustrd>
                    <Ustrd>otra linea del documento</Ustrd>
                </RmtInf>
            </CdtTrfTxInf>

Se lo comenté a Mihura, pero como suele ser habitual ÉL está ya de vuelta y me indicó que además del método propuesto se puede hacer de otro modo "Hay otra manera de tratar eso que dices, que es crear una variable Nodes, asignarle la colección de nodos que cumplen un criterio y después explotar dicha colección" y que es con otra función de sus ejemplos XML

Saludos,

Editado por SkaryBlondi - 05/Octubre/2021 a las 16:07
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable