Prezados,
Segue aqui outro exemplo de procedures, podem converter para classe esses códigos automatizando assim a leitura.
<Xml>
<Retorno>
<NoXml id="1">
<TJogadorID>2</TJogadorID>
<TNome>Neri</TNome>
<TClassificacao>600</TClassificacao>
<TFone>1</TFone>
<TFoto>1</TFoto>
</NoXml>
<NoXml id="2">
<TJogadorID>1</TJogadorID>
<TNome>Adriano Boller</TNome>
<TClassificacao>1</TClassificacao>
<TFone>1</TFone>
<TFoto>1</TFoto>
</NoXml>
<Total>2</Total>
</Retorno>
</Xml>
CODIGO GLOBAL CODE
arrXml_Tags is array of strings
arrXml_TagResult is array of strings
gsGloXmlResultado is string = ""
GloTotalRegistros is int = 0
GloXml is string
pws_listar_jogador(0)
ws_listar_jogadores()
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)
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
arrXml_Tags = ArrayDeleteDuplicateBoller(arrXml_Tags)
ArrayDeleteDuplicate(arrXml_Tags,tccIgnoreSpace)
RESULT (arrXml_Tags)
Procedure LeituraGravacaoXml(XmlRetorno,Tabela)
buf_Foto is Buffer = ""
LocalizarTagsEmXml(XmlRetorno)
XmlRetorno = ""
X, T is int = 0
QTD_TAGS is int = ArrayCount(arrXml_Tags)
QTD_Resultados is int = ArrayCount(arrXml_TagResult)
IF Tabela = "TJogador"
HDeleteAll(TJogador)
END
LOOP (QTD_Resultados)
X += 1
T += 1
XmlRetorno += arrXml_Tags[T] + ": " + arrXml_TagResult[X] + CR
IF Tabela = "TJogador"
IF T = 1
TJogador.TJogadorID = arrXml_TagResult[X]
ELSE IF T = 2
TJogador.TNome = arrXml_TagResult[X]
ELSE IF T = 3
TJogador.TClassificacao = arrXml_TagResult[X]
ELSE IF T = 4
TJogador.TFone = arrXml_TagResult[X]
ELSE IF T = 5
buf_Foto = arrXml_TagResult[X]
TJogador.TFoto = Uncrypt(buf_Foto,"",cryptNone)
HAdd(TJogador)
END
END
IF T = QTD_TAGS THEN
T = 0
XmlRetorno += CR
END
END
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(gsGloXmlResultado,"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(gsGloXmlResultado,"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
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 Inicio = 0 THEN
Inicio = PositionOccurrence(RetornoXml,"<NoXml id="+Charact(34)+NoXmlId+Charact(34)+">",firstRank,FromBeginning)
IF Inicio = 0 THEN
Inicio = PositionOccurrence(RetornoXml,"<NoXml Id="+Charact(34)+NoXmlId+Charact(34)+">",firstRank,FromBeginning)
END
END
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
Procedure pws_listar_jogador(id is int)
ArrayDeleteAll(arrXml_Tags)
ArrayDeleteAll(arrXml_TagResult)
gsGloXmlResultado = ""
GloTotalRegistros = 0
GloXml = ""
Xml_retorno is string
retornoXml is a ws_listar_jogadorResponse
retornoXml = ws_listar_jogador("20872",id)
Xml_retorno = retornoXml.ws_listar_jogadorResult
Xml_retorno = UTF8ToAnsi(Xml_retorno)
gsGloXmlResultado = Xml_retorno
GloTotalRegistros = XMLExtractString(gsGloXmlResultado,"Total")
HDeleteAll(TJogador)
LeituraGravacaoXml(Xml_retorno,"TJogador")
RESULTADO
--
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/