Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-01-2020
cocute cocute is offline
Miembro
 
Registrado: nov 2008
Posts: 403
Poder: 16
cocute Va por buen camino
Leer valores XML

Hola han cambiado el formato del xml que necesito leer y no doy como leerlo:
Cita:
<?xml version="1.0" encoding="ISO-8859-1"?>
<observations xmlns="">
<observations>
<observations>
<stationID>IALMUDIDI</stationID>
<obsTimeUtc>2020-01-09T09:40:24Z</obsTimeUtc>
<obsTimeLocal>2020-01-09 10:40:24</obsTimeLocal>
<neighborhood>Abalate</neighborhood>
<softwareType>EasyWeatherV1.4.5</softwareType>
<country>ES</country>
<solarRadiation>91.13</solarRadiation>
<lon>-0.58356375</lon>
<epoch>1578562824</epoch>
<lat>42.04382324</lat>
<uv>1</uv>
<winddir>213</winddir>
<humidity>99</humidity>
<qcStatus>-1</qcStatus>
<metric>
<temp>-0.3888888888888885</temp>
<heatIndex>-0.3888888888888885</heatIndex>
<dewpt>-0.6111111111111119</dewpt>
<windChill>-0.3888888888888885</windChill>
<windSpeed>0</windSpeed>
<windGust>0</windGust>
<pressure>1020.522068496</pressure>
<precipRate>0</precipRate>
<precipTotal>0</precipTotal>
<elev>437.08320000000003</elev>
</metric>
</observations>
</observations>
</observations>
Alguien me puede decir como leo por ejemlo el valor neighborhood y el valor temp ?

tengo algo así pero se me ha olvidado como me muevo por los distintos nodos y demás y no doy
Código Delphi [-]

 try

XmlContent := GetContent('enlace del xml')
  except
    on E: Exception do
    begin
      Exit;
    end;
  end;

  if (not XmlContent.IsEmpty()) then
  begin
    XMLDoc.LoadFromXML(XmlContent);


begin

 StartItemNode := XMLDoc.DocumentElement.ChildNodes.FindNode('observations');
 label3.Text:=StartItemNode.childNodes['neighborhood'].Text;


 StartItemNode := XMLDoc.DocumentElement.ChildNodes.FindNode('metric');
  StartItemNode := XMLDoc.DocumentElement.ChildNodes.FindNode('temp') ;
 label1.Text:=  StartItemNode.Text+'ºC';



muuuchas gracias
Responder Con Cita
  #2  
Antiguo 09-01-2020
xalo xalo is offline
Miembro
 
Registrado: ene 2011
Posts: 18
Poder: 0
xalo Va por buen camino
El XPath del nodo neighborhood es '/observations/observations/observations/neighborhood', por tanto tienes que buscar el nodo hijo dentro de observations/observations y ya lo obtendrás sin problemas.

Saludos
Responder Con Cita
  #3  
Antiguo 09-01-2020
cocute cocute is offline
Miembro
 
Registrado: nov 2008
Posts: 403
Poder: 16
cocute Va por buen camino
Cita:
Empezado por xalo Ver Mensaje
El XPath del nodo neighborhood es '/observations/observations/observations/neighborhood', por tanto tienes que buscar el nodo hijo dentro de observations/observations y ya lo obtendrás sin problemas.

Saludos
muchas gracias entonces pongo
Código Delphi [-]
  StartItemNode := XMLDoc.DocumentElement.ChildNodes.FindNode('/observations/observations');
  label3.Text:=StartItemNode.childNodes['neighborhood'].Text;

o me estoy dejando algún obsevations?


Otra duda que me surge si el xml lo estoy descargando de una página segura https creo que no me deja pillar datos?
Código Delphi [-]
XmlContent := GetContent('https://api.weather.com/v2/pws/observations/current?stationId=IDDELAESTACION&format=xml&units=m&numericPrecision=decimal&apiKey=XXXXXXXXXXXXXX')
Alguna solución a esto?

Última edición por cocute fecha: 09-01-2020 a las 15:57:56.
Responder Con Cita
  #4  
Antiguo 09-01-2020
xalo xalo is offline
Miembro
 
Registrado: ene 2011
Posts: 18
Poder: 0
xalo Va por buen camino
Cita:
Quote:
Originally Posted by xalo View Post
El XPath del nodo neighborhood es '/observations/observations/observations/neighborhood', por tanto tienes que buscar el nodo hijo dentro de observations/observations y ya lo obtendrás sin problemas.

Saludos
muchas gracias entonces pongo
Código Delphi [-]
StartItemNode := XMLDoc.DocumentElement.ChildNodes.FindNode('/observations/observations');
label3.Text:=StartItemNode.childNodes['neighborhood'].Text;

o me estoy dejando algún obsevations?
No estoy seguro ahora si lleva la / inicial, ....pero pruébalo.

Cita:
Otra duda que me surge si el xml lo estoy descargando de una página segura https creo que no me deja pillar datos?
Código Delphi [-]
XmlContent := GetContent('https://api.weather.com/v2/pws/observations/current?stationId=IDDELAESTACION&format=xml&units=m&numericPrecision=decimal&apiKey=XXXXXXXXXXXXXX')
Alguna solución a esto?
No entiendo la pregunta. Mira que recibes en xmlContent.
Responder Con Cita
  #5  
Antiguo 10-01-2020
cocute cocute is offline
Miembro
 
Registrado: nov 2008
Posts: 403
Poder: 16
cocute Va por buen camino
Cita:
Empezado por xalo Ver Mensaje
No entiendo la pregunta. Mira que recibes en xmlContent.
es que no se que han tocado pero ya no consigo ver los ficheros xml que antes me permitía leer desde mi aplicación android,
si lo hago desde windows me deja pero desde android no.

por ejemplo este xml:
https://www.wunderground.com/weather...p?ID=IZARAGOZ9

como he dicho antes no se si puede ser porque ahora la dirección empieza por https en vez de por http

el fichero lo pillo con un IdHTTP con esta función, no si si eso es lo que debo cambiar, aunque antes me iba:
Código Delphi [-]
function GetContent(const URL: string): string;
  var
    Response: TStringStream;
  begin
    Response := TStringStream.Create(EmptyStr, TEncoding.UTF8);
    try
      IdHTTP1.Get(URL, Response);
      Result := Response.DataString;
    finally
      Response.Free();
    end;
  end;

Última edición por cocute fecha: 10-01-2020 a las 11:07:22.
Responder Con Cita
  #6  
Antiguo 10-01-2020
xalo xalo is offline
Miembro
 
Registrado: ene 2011
Posts: 18
Poder: 0
xalo Va por buen camino
Cambia tu código por el que se menciona aquí y funcionará.

Otro tema que te encontrarás en Android es el tema de versiones de las librerías Openssl, pero si buscas en el foro, seguro que encuentras la solución.

Saludos
Responder Con Cita
  #7  
Antiguo 10-01-2020
cocute cocute is offline
Miembro
 
Registrado: nov 2008
Posts: 403
Poder: 16
cocute Va por buen camino
Cita:
Empezado por xalo Ver Mensaje
Cambia tu código por el que se menciona aquí y funcionará.

Otro tema que te encontrarás en Android es el tema de versiones de las librerías Openssl, pero si buscas en el foro, seguro que encuentras la solución.

Saludos
muchas gracias por tu tiempo, ese link lo había encontrado yo también buscando sobre el tema pero
he metido ese código pero nada no cambia nada creo que no me le el xml,

sobre lo de las librerias Openssl no entiendo como debo proceder
Responder Con Cita
  #8  
Antiguo 10-01-2020
cocute cocute is offline
Miembro
 
Registrado: nov 2008
Posts: 403
Poder: 16
cocute Va por buen camino
he encontrado esto:
https://stackoverflow.com/questions/...d-with-tidhttp

pero que debo hacer meter en el deploy las librerias en la carpeta:
library\lib\armeabi-v7a

sin añadir ningún código extra al programa o como ¿?
Responder Con Cita
  #9  
Antiguo 11-01-2020
cocute cocute is offline
Miembro
 
Registrado: nov 2008
Posts: 403
Poder: 16
cocute Va por buen camino
me ha costado pero ya lo he solucionado con esto:

Cita:
Delphi

Project file
///////////////////////////////////////////////////////////
uses
System.StartUpCopy,
System.IoUtils,
FMX.Forms,
IdSSLOpenSSLHeaders,
{$IFDEF IOS}
IdSSLOpenSSLHeaders_Static,
{$ENDIF }
{$R *.res}

begin
Application.Initialize;
{$IFDEF ANDROID}
IdOpenSSLSetLibPath(TPath.GetDocumentsPath);
{$ENDIF}
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end.
/////////////////////////////////////////////////////////////

Deploy libraries in documents folder
Project -> Deployment -> All Configurations -> android platform -> Add file -> select your libraries
set remote path for files to: .\assets\internal\
Responder Con Cita
  #10  
Antiguo 11-01-2020
xalo xalo is offline
Miembro
 
Registrado: ene 2011
Posts: 18
Poder: 0
xalo Va por buen camino
Genial!
Pero podrías por favor detallar brevemente los pasos? así los siguientes podrán disfrutar del aporte que has hecho.

Muchas gracias
Responder Con Cita
  #11  
Antiguo 12-01-2020
cocute cocute is offline
Miembro
 
Registrado: nov 2008
Posts: 403
Poder: 16
cocute Va por buen camino
no se si es necesario todo pero es lo que me ha funcionado,
en el fichero de nuestro proyecto dpr metemos las lineas que nos falten
Código PHP:
///////////////////////////////////////////////////////////
uses
System
.StartUpCopy,
System.IoUtils,
FMX.Forms,
IdSSLOpenSSLHeaders,
{
$IFDEF IOS}
IdSSLOpenSSLHeaders_Static,
{
$ENDIF }
{
$R *.res}

begin
Application
.Initialize;
{
$IFDEF ANDROID}
IdOpenSSLSetLibPath(TPath.GetDocumentsPath);
{
$ENDIF}
Application.CreateForm(TMainFormMainForm);
Application.Run;
end.
///////////////////////////////////////////////////////////// 
extraemos estas librerias en la carpeta de nuestro proyecto por ejemplo:
https://forums.embarcadero.com/servl...%20Android.zip
y luego en el Deploy de nuestro proyectoañadimos las dos librerias libssl.so y libcrypto.so
Project -> Deployment -> All Configurations -> android platform -> Add file -> select your libraries
y en e path de cada una le ponemos: .\assets\internal\

Última edición por cocute fecha: 12-01-2020 a las 10:45:27.
Responder Con Cita
  #12  
Antiguo 12-01-2020
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Y qué tiene que ver esto con la pregunta inicial del hilo?
Responder Con Cita
  #13  
Antiguo 12-01-2020
cocute cocute is offline
Miembro
 
Registrado: nov 2008
Posts: 403
Poder: 16
cocute Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
¿Y qué tiene que ver esto con la pregunta inicial del hilo?
es que al final la base del problema era esta, que no podía leer los ficheros XML por tema de las libreriasindy SSL

por lo que veo al menos para la última versión hay parche,
https://cc.embarcadero.com/Item/30906
Responder Con Cita
  #14  
Antiguo 12-01-2020
MaxiDucoli MaxiDucoli is offline
Miembro
 
Registrado: feb 2006
Posts: 134
Poder: 19
MaxiDucoli Va por buen camino
Cita:
Empezado por xalo Ver Mensaje
No estoy seguro ahora si lleva la / inicial, ....pero pruébalo.



No entiendo la pregunta. Mira que recibes en xmlContent.
HTTPS lo solucionas con las librerías SSL
creo que eran ssl.so o algo así que tenés que ponerle.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como leer valores Binarios del Registro JoAnCa OOP 5 10-09-2015 00:08:20
Leer valores hexadecimales del registro Feñiz OOP 1 28-01-2015 03:11:46
VALORES FANTASMAS FIREBIRD 2.1 valores Grandes ASAPLTDA Firebird e Interbase 17 02-12-2012 13:09:02
Driver dbExpress para db2 falla al leer valores BCD de campos DECIMAL rolandoj Conexión con bases de datos 9 10-08-2010 17:44:51
Leer arreglo de valores __hector PHP 2 12-12-2003 18:14:56


La franja horaria es GMT +2. Ahora son las 20:28:07.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi