|
Accueil → WINDEV 25 → Wx - Leitura de arquivos XML com um Registro e Multiplos registros, Extração das Tag e dos Valores de cada Tag para uso em seus sistemas |
Wx - Leitura de arquivos XML com um Registro e Multiplos registros, Extração das Tag e dos Valores de cada Tag para uso em seus sistemas |
Débuté par adrianoboller, 15 jan. 2016 21:29 - 11 réponses |
| |
| | | |
|
| |
Membre enregistré 3 655 messages Popularité : +175 (223 votes) |
|
Posté le 15 janvier 2016 - 21:29 |
Boa tarde Prezados,
Segue 3 vídeo aulas para estudo de arquivo xml para ler xml no Android e no iOS
http://www.screencast.com/t/sPyLGnKxfa
http://www.screencast.com/t/6C4OCWcW
http://www.screencast.com/t/V0APuTWU
os fontes estão no fórum oficial
Estou passando o exemplo para a PcSoft corrigir a função arraydeleteduplicate( ) que esqueceram de fazer para o Android que dei o nome de ArrayDeleteDuplicateBoller( ). E o Pega Nó do Xml que dei o nome de PegaNoXml( )
Bons estudos, espero ter esclarecido como se trabalha com xml nas duas plataformas.
Caso alguém tenha ficado com dúvida entre em contato
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.blogspot.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 655 messages Popularité : +175 (223 votes) |
|
Posté le 15 janvier 2016 - 21:29 |
arrXml_Tags is array of strings
arrXml_TagResult is array of strings
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.blogspot.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 655 messages Popularité : +175 (223 votes) |
|
Posté le 15 janvier 2016 - 21:30 |
Procedure LocalizarTagsEmXml(XML_Retorno is string)
nXposicaoinicial is int = 0 nXposicaofinal is int = 0 arrXml_Tag is array of strings
X is int = 0
IF IniOSMode() = True THEN NoXml is string i is int = 1 NoXml = XMLExtractString(XML_Retorno,"NoXml",i) Add(arrXml_Tag,"login_id") Add(arrXml_Tag,"login_email") Add(arrXml_Tag,"login_nome") Add(arrXml_Tag,"login_senha") Add(arrXml_Tag,"login_status") Add(arrXml_Tag,"login_admin") FOR EACH stag OF arrXml_Tag temp is string = XMLExtractString(NoXml,stag) Add(arrXml_TagResult, temp ) END
ELSE IF InAndroidMode() = True XmlDoc is XMLDocument XmlDoc = XMLOpen(XML_Retorno, fromString) NoXml is xmlNode FOR EACH NoXml OF XmlDoc.Xml.Retorno on NoXml Add(arrXml_TagResult, NoXml.login_id) Add(arrXml_TagResult, NoXml.login_email) Add(arrXml_TagResult, NoXml.login_nome) Add(arrXml_TagResult, NoXml.login_senha) Add(arrXml_TagResult, NoXml.login_status) Add(arrXml_TagResult, NoXml.login_admin) END END
RESULT arrXml_TagResult
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.blogspot.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 655 messages Popularité : +175 (223 votes) |
|
Posté le 15 janvier 2016 - 21:32 |
Procedure LocalizarTagsEmXml(XML_Retorno is string)
nXposicaoinicial is int = 0 nXposicaofinal is int = 0 arrXml_Tag is array of strings
X is int = 0
IF IniOSMode() = True THEN NoXml is string i is int = 1 NoXml = XMLExtractString(XML_Retorno,"NoXml",i) Add(arrXml_Tag,"login_id") Add(arrXml_Tag,"login_email") Add(arrXml_Tag,"login_nome") Add(arrXml_Tag,"login_senha") Add(arrXml_Tag,"login_status") Add(arrXml_Tag,"login_admin") XmlDoc is XMLDocument
XmlDoc = XMLOpen(XML_Retorno, fromString) total is int = XMLExtractString(XML_Retorno,"Total") LOOP (total) FOR EACH stag OF arrXml_Tag on stag temp is string = XMLExtractString(NoXml,stag) Add(arrXml_TagResult, temp ) END END
ELSE IF InAndroidMode() = True XmlDoc is XMLDocument XmlDoc = XMLOpen(XML_Retorno, fromString) NoXml is xmlNode FOR EACH NoXml OF XmlDoc.Xml.Retorno on NoXml Add(arrXml_TagResult, NoXml.login_id) Add(arrXml_TagResult, NoXml.login_email) Add(arrXml_TagResult, NoXml.login_nome) Add(arrXml_TagResult, NoXml.login_senha) Add(arrXml_TagResult, NoXml.login_status) Add(arrXml_TagResult, NoXml.login_admin) END END
RESULT arrXml_TagResult
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.blogspot.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 655 messages Popularité : +175 (223 votes) |
|
Posté le 15 janvier 2016 - 21:34 |
Procedure ArrayDeleteDuplicateBoller(ArrayResultado is array of strings)
x, NaoAchou is int = 0
ArrayResultadoNovo is array of strings
nTotal is int = ArrayCount(ArrayResultado) LOOP (nTotal) x += 1 NaoAchou = ArraySeek(ArrayResultadoNovo,asLinearFirst,ArrayResultado[x]) IF NaoAchou = -1 Add(ArrayResultadoNovo,ArrayResultado[x]) END END
RESULT (ArrayResultadoNovo)
outra procedure
Procedure IdentificarTagsNoXml(XmlConteudo) x, Inicial, Final, Tamanho is int = 0 Tag, Anterior is string = "" IF XmlConteudo <> "" THEN XmlConteudo = NoAccent(XmlConteudo) XmlConteudo = Replace(XmlConteudo,CR,"") XmlConteudo = Replace(XmlConteudo,Charact(13),"") XmlConteudo = Replace(XmlConteudo,Charact(10),"") Total is int = Length(XmlConteudo) LOOP (Total) x += 1 IF XmlConteudo[[x]] = "<" Inicial = x+1 ELSE IF XmlConteudo[[x]] = ">" Final = x IF Final <= Inicial THEN Final = 0 END END IF Inicial > 0 AND Final > 0 AND Final > Inicial Tamanho = Final - Inicial Tag = Middle(XmlConteudo,Inicial,Tamanho) IF Middle(Tag,1,1) = "/" OR PositionOccurrence(Upper(Tag),"ID=",firstRank,FromBeginning) > 0 Tag = "" END IF Tag <> "" AND Tamanho > 0 AND Anterior <> Tag AND Upper(Tag) <> "XML" AND Upper(Tag) <> "RETORNO" AND Upper(Tag) <> "TOTAL" Anterior = Tag Add(arrXml_Tags,Tag) END END END END
ArrayDeleteDuplicate(arrXml_Tags,tccIgnoreSpace)
outra procedure
Procedure LocalizarTagsEmXml(XML_Retorno is string)
nXposicaoinicial is int = 0 nXposicaofinal is int = 0
X is int = 0
IF IniOSMode() = True THEN NoXml is string i is int = 1 NoXml = XMLExtractString(XML_Retorno,"NoXml",i) IdentificarTagsNoXml(XML_Retorno) FOR EACH stag OF arrXml_Tags temp is string = XMLExtractString(NoXml,stag) Add(arrXml_TagResult, temp ) END
ELSE IF InAndroidMode() = True T is int = 0 IdentificarTagsNoXml(XML_Retorno) nQtde_tags is int = ArrayCount(arrXml_Tags) TagRegistro is string TagValor is string LOOP (nQtde_tags) T += 1 TagRegistro = arrXml_Tags[T] TagValor = XMLExtractString(XML_Retorno,TagRegistro) IF TagValor <> "" Add(arrXml_TagResult,TagValor) END END
END
RESULT arrXml_TagResult
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.blogspot.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 123 messages Popularité : +46 (46 votes) |
|
Posté le 15 janvier 2016 - 21:36 |
Muito Bom Adriano Show De bola
-- Atte. Willian Fernando |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 655 messages Popularité : +175 (223 votes) |
|
Posté le 15 janvier 2016 - 21:37 |
Procedure ArrayDeleteDuplicateBoller(ArrayResultado is array of strings)
x, NaoAchou is int = 0
ArrayResultadoNovo is array of strings
nTotal is int = ArrayCount(ArrayResultado) LOOP (nTotal) x += 1 NaoAchou = ArraySeek(ArrayResultadoNovo,asLinearFirst,ArrayResultado[x]) IF NaoAchou = -1 Add(ArrayResultadoNovo,ArrayResultado[x]) END END
RESULT (ArrayResultadoNovo)
outra procedure
Procedure IdentificarTagsNoXml(XmlConteudo) x, Inicial, Final, Tamanho is int = 0 Tag, Anterior is string = "" IF XmlConteudo <> "" THEN XmlConteudo = NoAccent(XmlConteudo) XmlConteudo = Replace(XmlConteudo,CR,"") XmlConteudo = Replace(XmlConteudo,Charact(13),"") XmlConteudo = Replace(XmlConteudo,Charact(10),"") Total is int = Length(XmlConteudo) LOOP (Total) x += 1 IF XmlConteudo[[x]] = "<" Inicial = x+1 ELSE IF XmlConteudo[[x]] = ">" Final = x IF Final <= Inicial THEN Final = 0 END END IF Inicial > 0 AND Final > 0 AND Final > Inicial Tamanho = Final - Inicial Tag = Middle(XmlConteudo,Inicial,Tamanho) IF Middle(Tag,1,1) = "/" OR PositionOccurrence(Upper(Tag),"ID=",firstRank,FromBeginning) > 0 Tag = "" END IF Tag <> "" AND Tamanho > 0 AND Anterior <> Tag AND Upper(Tag) <> "XML" AND Upper(Tag) <> "RETORNO" AND Upper(Tag) <> "TOTAL" Anterior = Tag Add(arrXml_Tags,Tag) END END END END
ArrayDeleteDuplicate(arrXml_Tags,tccIgnoreSpace)
Outra Procedure
Procedure LocalizarTagsEmXml(XML_Retorno is string)
nXposicaoinicial is int = 0 nXposicaofinal is int = 0
X is int = 0
IF IniOSMode() = True THEN T, N is int = 0 RegistroXml is string NoXml is string i is int = 1 NoXml = XMLExtractString(XML_Retorno,"NoXml",i) IdentificarTagsNoXml(XML_Retorno)
nQtde_Registros is int = XMLExtractString(EDT_XML,"Total")
LOOP (nQtde_Registros) T = 0 N += 1 RegistroXml = PegaNoXml(XML_Retorno,N) NoXml = XMLExtractString(RegistroXml,"NoXml",i) FOR EACH stag OF arrXml_Tags temp is string = XMLExtractString(NoXml,stag) Add(arrXml_TagResult, temp ) END END
ELSE IF InAndroidMode() = True T, N is int = 0 IdentificarTagsNoXml(XML_Retorno) nQtde_tags is int = ArrayCount(arrXml_Tags) TagRegistro, RegistroXml is string TagValor is string nQtde_Registros is int = XMLExtractString(EDT_XML,"Total") LOOP (nQtde_Registros) T = 0 N += 1 RegistroXml = PegaNoXml(XML_Retorno,N) LOOP (nQtde_tags) T += 1 TagRegistro = arrXml_Tags[T] TagValor = XMLExtractString(RegistroXml,TagRegistro) IF TagValor <> "" Add(arrXml_TagResult,TagValor) END END END
END
RESULT arrXml_TagResult
Outra Procedure
Procedure PegaNoXml(RetornoXml, NoXmlId)
Inicio, Final, Tamanho is int = 0
NoXml is string = "<Xml><Retorno>"
IF RetornoXml <> "" AND NoXmlId > 0 THEN Inicio = PositionOccurrence(RetornoXml,"<NoXml ID="+Charact(34)+NoXmlId+Charact(34)+">",firstRank,FromBeginning) IF NoXmlId = 1 Final = PositionOccurrence(RetornoXml,"</NoXml>",firstRank,FromBeginning) ELSE Final = PositionOccurrence(RetornoXml,"</NoXml>",nextRank,FromBeginning) END Tamanho = Final - Inicio NoXml += Middle(RetornoXml,Inicio,Tamanho) END
NoXml += "</NoXml></Retorno></Xml>"
NoXml = Replace(NoXml,CR,"") NoXml = Replace(NoXml,Charact(13),"") NoXml = Replace(NoXml,Charact(10),"")
RESULT NoXml
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.blogspot.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 655 messages Popularité : +175 (223 votes) |
|
Posté le 15 janvier 2016 - 21:40 |
Lembrando que eu coloquei em modo ANSI o projeto inteiro
Se não aparece tudo em japonês, rssss.
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.blogspot.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 655 messages Popularité : +175 (223 votes) |
|
Posté le 15 janvier 2016 - 21:47 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 655 messages Popularité : +175 (223 votes) |
|
Posté le 15 janvier 2016 - 22:04 |
Prezados,
Segue aqui o fonte para estudos
https://mega.nz/…
Bons estudos
Tendo sugestões, sobre o assunto, favor postem material, por mais simples que pareça, mas caso não tenha no help é interessante para quem esta iniciando os estudos da plataforma PcSoft.
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.blogspot.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 655 messages Popularité : +175 (223 votes) |
|
Posté le 27 juillet 2016 - 16:47 |
Exemplo de XML para usar esse código:
<Xml> <Retorno> <NoXml ID="1"> <login_id>1</login_id> <login_email>adriano@teste.com</login_email> <login_nome>ADRIANO</login_nome> <login_senha>123</login_senha> <login_status>1</login_status> <login_admin>0</login_admin> </NoXml> <NoXml ID="2"> <login_id>2</login_id> <login_email>juliana@teste.com</login_email> <login_nome>JULIANA</login_nome> <login_senha>123456</login_senha> <login_status>1</login_status> <login_admin>0</login_admin> </NoXml> <NoXml ID="3"> <login_id>3</login_id> <login_email>rafael@teste.com</login_email> <login_nome>RAFAEL</login_nome> <login_senha>123456789</login_senha> <login_status>1</login_status> <login_admin>0</login_admin> </NoXml> <Total>3</Total> </Retorno> </Xml>
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 655 messages Popularité : +175 (223 votes) |
|
Posté le 17 mai 2017 - 14:54 |
| |
| |
| | | |
|
| | | | |
| | |
|