PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 24 → Example Variable Struct Table Memory
Example Variable Struct Table Memory
Débuté par adrianoboller, 23 déc. 2014 11:57 - 3 réponses
Membre enregistré
2 969 messages
Popularité : +89 (91 votes)
Posté le 23 décembre 2014 - 11:57
Procedure WS_ExtrairEndereco(endereco)

IF GloDebugSN = "S" THEN
NextTitle("Extrair Endereço")
Info("WS_ExtrairEndereco",endereco)
END

sRua, sNumero, sBairro, sCidade, sEstado, sPais, sCep is string = ""

IF endereco <> ""

endereco = Replace(endereco,"State Of ", "",IgnoreCase)

//Separador - das 3 colunas
arrSplitArray is array of strings
StringToArray(endereco, arrSplitArray," - ")
//FOR EACH string sExtracColunn, nRank of endereco SEPAREE by " - "
//
//add(arrSplitArray, sExtracColunn)
//
//END

IF ArrayCount(arrSplitArray) = 3

//Separador , da rua e numero
arrSplitRuaNumeroArray is array of strings
StringToArray(arrSplitArray[1], arrSplitRuaNumeroArray,",")


IF ArrayCount(arrSplitRuaNumeroArray) = 1

sRua = arrSplitRuaNumeroArray[1];

sNumero = "0";

ELSE IF ArrayCount(arrSplitRuaNumeroArray) = 2

sRua = arrSplitRuaNumeroArray[1];

IF PositionOccurrence(arrSplitRuaNumeroArray[2],"-",firstRank) > 0 THEN

arrSplitNumeroArray is array of strings
StringToArray(arrSplitRuaNumeroArray[2], arrSplitNumeroArray,"-")

WHEN EXCEPTION IN
Media is int = (Val(arrSplitNumeroArray[1]) + Val(arrSplitNumeroArray[2])) / 2
DO
sNumero = 0
ELSE
sNumero = Media
END


ELSE

sNumero = arrSplitRuaNumeroArray[2];

END

END


/////
//Separador , do bairro e cidade
arrSplitBairroCidadeArray is array of strings
StringToArray(arrSplitArray[2], arrSplitBairroCidadeArray,",")

IF ArrayCount(arrSplitBairroCidadeArray) = 2

sBairro =arrSplitBairroCidadeArray[1];
sCidade = arrSplitBairroCidadeArray[2];

ELSE IF (ArrayCount(arrSplitBairroCidadeArray) = 3)

sBairro = arrSplitBairroCidadeArray[1];
sCidade = arrSplitBairroCidadeArray[3];

ELSE

sBairro = "";
sCidade = "";

END

//Separador , do bairro e cidade
arrSplitEstadoCepPaisArray is array of strings
StringToArray(arrSplitArray[3], arrSplitEstadoCepPaisArray,",")

IF ArrayCount(arrSplitEstadoCepPaisArray) = 2

sEstado = arrSplitEstadoCepPaisArray[1];
sPais = arrSplitEstadoCepPaisArray[2];
sCep = ""

ELSE IF ArrayCount(arrSplitEstadoCepPaisArray)= 3

sEstado = arrSplitEstadoCepPaisArray[1];
sCep = arrSplitEstadoCepPaisArray[2];
sPais = arrSplitEstadoCepPaisArray[3];
ELSE

sEstado = ""
sCep = ""
sPais = ""

END
ELSE IF ArrayCount(arrSplitArray) = 2

arrSplitRuaCidadeArray is array of strings
StringToArray(arrSplitArray[1], arrSplitRuaCidadeArray,",")

sNumero = "0";
IF ArrayCount(arrSplitRuaCidadeArray) = 1

sRua = arrSplitRuaCidadeArray[1];



ELSE IF ArrayCount(arrSplitRuaCidadeArray) = 2

sRua = arrSplitRuaCidadeArray[1];
sCidade = arrSplitRuaCidadeArray[2];

ELSE IF ArrayCount(arrSplitRuaCidadeArray) = 3

sRua = arrSplitRuaCidadeArray[1];
//--
IF PositionOccurrence(arrSplitRuaCidadeArray[2],"-",firstRank) > 0 THEN

arrSplitNumeroArray is array of strings
StringToArray(arrSplitRuaCidadeArray[2], arrSplitNumeroArray,"-")

WHEN EXCEPTION IN
Media is int = (Val(arrSplitNumeroArray[1]) + Val(arrSplitNumeroArray[2])) / 2
DO
sNumero = 0
ELSE
sNumero = Media
END


ELSE

sNumero = arrSplitRuaCidadeArray[2];

END



//--
sCidade = arrSplitRuaCidadeArray[3];
END


arrSplitEstadoCepPaisArray is array of strings
StringToArray(arrSplitArray[2], arrSplitEstadoCepPaisArray,",")
IF ArrayCount(arrSplitEstadoCepPaisArray) = 2

sEstado = arrSplitEstadoCepPaisArray[1];
sPais = arrSplitEstadoCepPaisArray[2];
sCep = ""

ELSE IF ArrayCount(arrSplitEstadoCepPaisArray)= 3

sEstado = arrSplitEstadoCepPaisArray[1];
sCep = arrSplitEstadoCepPaisArray[2];
sPais = arrSplitEstadoCepPaisArray[3];
ELSE

sEstado = ""
sCep = ""
sPais = ""

END






END

//Replace Estado
sEstado = Capitalize(Clip(sEstado))
IF sEstado <> ""

IF sEstado = "Acre" THEN
sEstado = "AC"
ELSE IF sEstado = "Alagoas" THEN
sEstado = "AL"
ELSE IF sEstado = "Amazonas" THEN
sEstado = "AM"
ELSE IF sEstado = "Amapa" THEN
sEstado = "AP"
ELSE IF sEstado = "Bahia" THEN
sEstado = "BA"
ELSE IF sEstado = "Ceara" THEN
sEstado = "CE"
ELSE IF sEstado = "Distrito Federal" THEN
sEstado = "DF"
ELSE IF sEstado = "Espirito Santo" THEN
sEstado = "ES"
ELSE IF sEstado = "Goias" THEN
sEstado = "GO"
ELSE IF sEstado = "Maranhao" THEN
sEstado = "MA"
ELSE IF sEstado = "Minas Gerais" THEN
sEstado = "MG"
ELSE IF sEstado = "Mato Grosso do Sul" THEN
sEstado = "MS"
ELSE IF sEstado = "Mato Grosso" THEN
sEstado = "MT"
ELSE IF sEstado = "Parana" THEN
sEstado = "PR"
ELSE IF sEstado = "Para" THEN
sEstado = "PA"
ELSE IF sEstado = "Paraiba" THEN
sEstado = "PB"
ELSE IF sEstado = "Pernambuco" THEN
sEstado = "PE"
ELSE IF sEstado = "Piaui" THEN
sEstado = "PI"
ELSE IF sEstado = "Rio de Janeiro" THEN
sEstado = "RJ"
ELSE IF sEstado = "Rio Grande DO Norte" THEN
sEstado = "RN"
ELSE IF sEstado = "Rondonia" THEN
sEstado = "RO"
ELSE IF sEstado = "Roraima" THEN
sEstado = "RR"
ELSE IF sEstado = "Rio Grande DO Sul" THEN
sEstado = "RS"
ELSE IF sEstado = "Santa Catarina" THEN
sEstado = "SC"
ELSE IF sEstado = "Sergipe" THEN
sEstado = "SE"
ELSE IF sEstado = "Sao Paulo" THEN
sEstado = "SP"
ELSE IF sEstado = "Tocantins" THEN
sEstado = "TO"
END

END

END
arrResult is array of strings

Add(arrResult, Capitalize(Clip(sRua)))
Add(arrResult, Clip(sNumero))
Add(arrResult, Capitalize(Clip(sBairro)))
Add(arrResult, Capitalize(Clip(sCidade)))
Add(arrResult, Upper(Clip(sEstado)))
Add(arrResult, Clip(sCep))
Add(arrResult, Capitalize(Clip(sPais)))

IF GloDebugSN = "S" THEN
NextTitle("Extrair Endereço")
Info(arrResult[1],arrResult[2],arrResult[3],arrResult[4],arrResult[5],arrResult[6],arrResult[7])
END

RESULT arrResult
Membre enregistré
2 969 messages
Popularité : +89 (91 votes)
Posté le 23 décembre 2014 - 11:57
RETURN FUNCTION Up:

arrResult1 is array of strings = WS_ExtrairEndereco(GloDestinoEnderecoLongo)

GloDestinoEndereco = arrResult1[1]
GloDestinoNumero = arrResult1[2]
GloDestinoBairro = arrResult1[3]
GloDestinoCidade = arrResult1[4]
GloDestinoUf = arrResult1[5]
GloDestinoCep = arrResult1[6]
GloDestinoPais = arrResult1[7]
Membre enregistré
2 969 messages
Popularité : +89 (91 votes)
Posté le 23 décembre 2014 - 11:59
Example 2

Procedure TesteResultWebService1()

//Busca ClienteNum
XML_Retorno,NumProces is string = ""
ok is boolean = False


sIpSaladaFruta01 is string = Morango_01 +"."+ Abacaxi_02 +"."+ Limao_03 +"."+ Melancia_04 +":"+ Laranja_05
sIpSaladaFruta02 is string = Morango_01 +"."+ Abacaxi_02 +"."+ Limao_03 +"."+ Melancia_04 +":"+ Manga_06
//NumProcess
NumProces = WS_Taxi_ValidaRequisicao("41",...
"98701006",...
0,...
0,...
"N")




//carros logados



//Envelope SOAP de envio// - recurso interessante no windev - string com texto com quebra de linha com definicao usando [ ] - #ObterRelacaoDeVeiculosLogados isso nao tem documentacao - mesmo o soapUi que mostrei nao coloca esse pedaço que defini o metodo usado no envelope, sem isso nao funciona
Xml_SEND is string = [
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:act297_RtPlusSSDM-IRtPlusSSDM#ObterRelacaoDeVeiculosLogados">
<soapenv:Header/>
<soapenv:Body>
<urn:ObterRelacaoDeVeiculosLogados soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<cod_client_celula xsi:type="xsd:int">V001</cod_client_celula>
<dat_hora_proces xsi:type="xsd:string">V002</dat_hora_proces>
<num_proces xsi:type="xsd:int">V003</num_proces>
</urn:ObterRelacaoDeVeiculosLogados>
</soapenv:Body>
</soapenv:Envelope>

]
//Replace
Xml_SEND = Replace(Xml_SEND,"v001","17",IgnoreCase)
Xml_SEND = Replace(Xml_SEND,"v002",GloDataHora,IgnoreCase)
Xml_SEND = Replace(Xml_SEND,"v003",NumProces,IgnoreCase)

HTTPTimeOut(GloHTTPTimeOut)

//BASE REAL

ok = HTTPRequest("http://"+"192.168.1.184:8085"+"/soap/IRtPlusSSDM","", "", Xml_SEND, "text/xml","","")

XML_Retorno = WS_Android_IOS_HTTPGetResult()

XML_Retorno = WS_RemoveAcentos(XML_Retorno)

ArrayDeleteAll(arr_TaxisLogados)
MyDoc is string
LocSt_TaxisLogados is ST_TaxisLogados
i is int = 1
LOOP

MyDoc = XMLExtractString(XML_Retorno,"NS2:TVeiculoLogadoVO",i)

IF MyDoc = "" THEN
BREAK
END
LocSt_TaxisLogados.ST_ID = XMLExtractString(MyDoc,"NumUnidad")
LocSt_TaxisLogados.ST_Latitude = XMLExtractString(MyDoc,"ValLatitu")
LocSt_TaxisLogados.ST_Longitude = XMLExtractString(MyDoc,"ValLongit")
LocSt_TaxisLogados.ST_Situacao = XMLExtractString(MyDoc,"IdeStatus")
arr_TaxisLogados[LocSt_TaxisLogados:ST_ID] = LocSt_TaxisLogados
i++
END


nContador is int =0

FOR EACH LocSt_TaxisLogados OF arr_TaxisLogados



nContador += 1 // contagem dos taxis que vieram do webservice

IF LocSt_TaxisLogados:ST_Situacao > 0 THEN

//cria o inone no mapa e é outra procedure: MarcadorTaxis
//info(LocSt_TaxisLogados:ST_ID,
//LocSt_TaxisLogados:ST_Latitude,
//LocSt_TaxisLogados:ST_Longitude,
//LocSt_TaxisLogados:ST_Situacao)
//Vamos ver o MarcadorTaxis que esta aqui na procedure local
//Esse procedimento é o modelo MVC de desenvolvimento
END

END


nInicial is int
nFinal is int
nInicial = PositionOccurrence(XML_Retorno,"<NS2:TVeiculoLogadoVO",firstRank,FromBeginning)
nFinal = PositionOccurrence(XML_Retorno,"</NS2:TVeiculoLogadoVO>",lastRank,FromEnd) +Length("</NS2:TVeiculoLogadoVO>")
XML_Retorno = Middle(XML_Retorno,nInicial,nFinal - nInicial)
XML_Retorno = Replace(XML_Retorno,"NS2:TVeiculoLogadoVO","NoXml")
XML_Retorno = "<Xml><Recorte>"+XML_Retorno+"</Recorte></Xml>"


//XML_Retorno = WS_RemoveAcentos(XML_Retorno)

IF XML_Retorno <> Null THEN
XML_Retorno = Replace(XML_Retorno,"NS2:TVeiculoLogadoVO","NoXml")


XmlDoc is XMLDocument
XmlDoc = XMLOpen(XML_Retorno,fromString)
NoXml is xmlNode
sTemp is string
FOR EACH NoXml OF XmlDoc.Xml.Recorte on NoXml

//info (NoXml.NumUnidad, NoXml.ValLatitu,NoXml.ValLongit,NoXml.IdeStatus)

END

END


////XML_Retorno = WS_RemoveAcentos(XML_Retorno)
//
//IF XML_Retorno <> Null THEN
//XML_Retorno = Replace(XML_Retorno,"NS2:TVeiculoLogadoVO","NoXml")
//XmlDoc is xmlDocument
//XmlDoc = XMLOpen(XML_Retorno,fromString)
//NoXml is xmlNode
//temp is string
//FOR EACH NoXml OF XmlDoc."SOAP-ENV:Envelope"."SOAP-ENV:Body" on NoXml
//
//
//temp = NoXml.NumUnidad
//temp = NoXml.ValLatitu
//temp = NoXml.ValLongit
//temp = NoXml.IdeStatus
//
//END
//
//END

//motivos
//Envelope
Xml_SEND = [
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:act297_RtPlusSSDM-IRtPlusSSDM#AtualizarMotivos">
<soapenv:Header/>
<soapenv:Body>
<urn:AtualizarMotivos soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<cod_client_celula xsi:type="xsd:int">v001</cod_client_celula>
<dat_hora_proces xsi:type="xsd:string">v002</dat_hora_proces>
<num_proces xsi:type="xsd:int">v003</num_proces>
</urn:AtualizarMotivos>
</soapenv:Body>
</soapenv:Envelope>
]
//Replace
Xml_SEND = Replace(Xml_SEND,"v001","17",IgnoreCase)
Xml_SEND = Replace(Xml_SEND,"v002",GloDataHora,IgnoreCase)
Xml_SEND = Replace(Xml_SEND,"v003",NumProces,IgnoreCase)

HTTPTimeOut(GloHTTPTimeOut)

//BASE REAL

ok = HTTPRequest("http://"+"192.168.1.184:8085"+"/soap/IRtPlusSSDM","", "", Xml_SEND, "text/xml","","")

XML_Retorno = WS_Android_IOS_HTTPGetResult()

XML_Retorno = WS_RemoveAcentos(XML_Retorno)

IF XML_Retorno <> Null THEN

XML_Retorno = Replace(XML_Retorno,"NS2:TAct297MotivoCancelamentoVO","NoXml")




///////////////////////////////////////////////////////////
IF True THEN



NoXml is string
ni is int = 1

LOOP

NoXml = XMLExtractString(XML_Retorno,"NoXml",ni)

IF NoXml = "" THEN
BREAK
END

sCodMotivoCancel is string = XMLExtractString(NoXml,"CodMotivoCancel")
sDesMotivo is string = XMLExtractString(NoXml,"DesMotivo")
//Busca Cartao
ni++
END

////////////////////////////////////////////////


END




XmlDoc is XMLDocument
XmlDoc = XMLOpen(XML_Retorno,fromString)
NoXml is xmlNode
temp is string
FOR EACH NoXml OF XmlDoc."SOAP-ENV:Envelope"."SOAP-ENV:Body" on NoXml

temp = NoXml.CodMotivoCancel
temp = NoXml.DesMotivo




END
IF temp <>Null THEN

END

END
//cartoes
//Envelope
Xml_SEND = [
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:act297_RtPlusSSDM-IRtPlusSSDM#AtualizarCartoes">
<soapenv:Header/>
<soapenv:Body>
<urn:AtualizarCartoes soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<cod_client_celula xsi:type="xsd:int">v001</cod_client_celula>
<dat_hora_proces xsi:type="xsd:string">v002</dat_hora_proces>
<num_proces xsi:type="xsd:int">v003</num_proces>
</urn:AtualizarCartoes>
</soapenv:Body>
</soapenv:Envelope>
]
//Replace
Xml_SEND = Replace(Xml_SEND,"v001","17",IgnoreCase)
Xml_SEND = Replace(Xml_SEND,"v002",GloDataHora,IgnoreCase)
Xml_SEND = Replace(Xml_SEND,"v003",NumProces,IgnoreCase)

HTTPTimeOut(GloHTTPTimeOut)

//BASE REAL

ok = HTTPRequest("http://"+"192.168.1.184:8085"+"/soap/IRtPlusSSDM","", "", Xml_SEND, "text/xml","","")

XML_Retorno = WS_Android_IOS_HTTPGetResult()

XML_Retorno = WS_RemoveAcentos(XML_Retorno)

IF XML_Retorno <> Null THEN


nInicial = PositionOccurrence(XML_Retorno,"<NS2:TTipoFormaPagamentoVO",firstRank,FromBeginning + IgnoreCase)
nFinal = PositionOccurrence(XML_Retorno,"</NS2:TTipoFormaPagamentoVO>",lastRank,FromEnd + IgnoreCase) +Length("</NS2:TTipoFormaPagamentoVO>")
XML_Retorno = Middle(XML_Retorno,nInicial,nFinal - nInicial)
XML_Retorno = Replace(XML_Retorno,"NS2:TTipoFormaPagamentoVO","NoXml")
XML_Retorno = "<Xml><Recorte>"+XML_Retorno+"</Recorte></Xml>"
// XmlDoc is xmlDocument
// XmlDoc = XMLOpen(XML_Retorno,fromString)
///NoXml is xmlNode



XML_Retorno = Replace(XML_Retorno,"NS2:TTipoFormaPagamentoVO","NoXml")
XmlDoc is XMLDocument
XmlDoc = XMLOpen(XML_Retorno,fromString)
NoXml is xmlNode
temp is string
//FOR EACH NoXml OF XmlDoc."SOAP-ENV:Envelope"."SOAP-ENV:Body" on NoXml
FOR EACH NoXml OF XmlDoc.Xml.Recorte on NoXml


temp = NoXml.CodFormaPagame
temp =NoXml.DesFormaPagame


END
IF temp <>Null THEN

END

END

//Pesquisa
//Envelope
Xml_SEND = [
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:act297_RtPlusSSDM-IRtPlusSSDM#AtualizarItensAvaliacao">
<soapenv:Header/>
<soapenv:Body>
<urn:AtualizarItensAvaliacao soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<cod_client_celula xsi:type="xsd:int">v001</cod_client_celula>
<dat_hora_proces xsi:type="xsd:string">v002</dat_hora_proces>
<num_proces xsi:type="xsd:int">v003</num_proces>
</urn:AtualizarItensAvaliacao>
</soapenv:Body>
</soapenv:Envelope>
]//Replace
Xml_SEND = Replace(Xml_SEND,"v001","17",IgnoreCase)
Xml_SEND = Replace(Xml_SEND,"v002",GloDataHora,IgnoreCase)
Xml_SEND = Replace(Xml_SEND,"v003",NumProces,IgnoreCase)

HTTPTimeOut(GloHTTPTimeOut)

//BASE REAL

ok = HTTPRequest("http://"+"192.168.1.184:8085"+"/soap/IRtPlusSSDM","", "", Xml_SEND, "text/xml","","")

XML_Retorno = WS_Android_IOS_HTTPGetResult()

XML_Retorno = WS_RemoveAcentos(XML_Retorno)

IF XML_Retorno <> Null THEN

XML_Retorno = Replace(XML_Retorno,"NS2:TAct297PesquisaSatisfacaoVO","NoXml")
XmlDoc is XMLDocument
XmlDoc = XMLOpen(XML_Retorno,fromString)
NoXml is xmlNode
temp is string
FOR EACH NoXml OF XmlDoc."SOAP-ENV:Envelope"."SOAP-ENV:Body" on NoXml


temp = NoXml.SeqItemPesqui
temp = NoXml.DesItemPesqui
temp = NoXml.SeqOrdemItemPesqui
temp = NoXml.IdeFormaPesqui
temp = NoXml.DatHoraUltimaAltera

END
IF temp <>Null THEN

END

END
Membre enregistré
2 969 messages
Popularité : +89 (91 votes)
Posté le 23 décembre 2014 - 12:01
Examplo 3

arrTemp is array of strings = WS_Android_iOs_ReadXml(XML_Retorno,"NS2:TVersaoTabelas")

....

Procedure WS_Android_iOs_ReadXml(XML_Retorno is string, Xml_Atributo is string )

//Exemplo de Uso:
// XML_Retorno is string = [
//<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
//xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
//xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
//<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
//xmlns:NS1="urn:act297_RtPlusSSDM-IRtPlusSSDM">
//<NS1:VerificarVersaoDeTabelasResponse xmlns:NS2="urn:act297_RtPlusSSDM">
//<NS2:TVersaoTabelas id="1" xsi:type="NS2:TVersaoTabelas">
//<datHoraMotivos xsi:type="xsd:string">2013-07-11T17:15:33</datHoraMotivos>
//<qtdMotivos xsi:type="xsd:int">3</qtdMotivos>
//<datHoraCartoes xsi:type="xsd:string">2013-07-01T12:00:00</datHoraCartoes>
//<qtdCartoes xsi:type="xsd:int">6</qtdCartoes>
//<datHoraPesquisa xsi:type="xsd:string">2013-07-10T12:14:42</datHoraPesquisa>
//<qtdPesquisa xsi:type="xsd:int">4</qtdPesquisa>
//</NS2:TVersaoTabelas>
//<return href="#1"/>
//</NS1:VerificarVersaoDeTabelasResponse>
//</SOAP-ENV:Body>
//</SOAP-ENV:Envelope>
// ]
//
// Uso da Funcao:
//arrTemp is array of strings = WS_Android_iOs_ReadXml(XML_Retorno,"NS2:TVersaoTabelas")

arrXml_TagResult is array of strings
xposicaoinicial is int = 0
Xposicaofinal is int = 0
X is int = 0
arrXml_Tag is array of strings

Inicial is int = PositionOccurrence(XML_Retorno,"<"+Xml_Atributo,firstRank,FromBeginning)
Final is int = PositionOccurrence(XML_Retorno,"</"+Xml_Atributo+">",lastRank,FromEnd) +Length("</"+Xml_Atributo+">")
XML_Retorno = Middle(XML_Retorno,Inicial,Final - Inicial)
XML_Retorno = Replace(XML_Retorno,Xml_Atributo,"NoXml")
XML_Retorno = "<Xml><Recorte>"+XML_Retorno+"</Recorte></Xml>"

nTotalxml is int = Length(XML_Retorno)

LOOP (nTotalxml)

X++
IFxposicaoinicial = 0 AND Xposicaofinal = 0 AND XML_Retorno[[X]] = "<" THEN
X++
IF XML_Retorno[[X]] = "/" THEN
xposicaoinicial = X + 1
END
END
IF xposicaoinicial > 0 AND XML_Retorno[[X]] = ">" THEN
Xposicaofinal = X
END
IF Xposicaofinal > 0 AND xposicaoinicial > 0 THEN
stag is string = Middle(XML_Retorno,xposicaoinicial,Xposicaofinal - xposicaoinicial)
IF stag="NoXml" THEN
BREAK
END
Add(arrXml_Tag, stag)
Xposicaofinal = 0
xposicaoinicial = 0
END

END

//iOS - Apple (iPhone / iPad / iPod)
IF IniOSMode() = True THEN

NoXml is string
i is int = 1
NoXml = XMLExtractString(XML_Retorno,"NoXml",i)

FOR EACH stag OF arrXml_Tag

temp is string = XMLExtractString(NoXml,stag)
Add(arrXml_TagResult, temp )

END

//Android
ELSE IF InAndroidMode() = True

XmlDoc is XMLDocument
XmlDoc = XMLOpen(XML_Retorno, fromString)
NoXml is xmlNode

FOR EACH NoXml OF XmlDoc.Xml.Recorte on NoXml

FOR EACH sTag OF arrXml_Tag

Add(arrXml_TagResult,NoXml..ChildNode[sTag])

END

END

END

RESULT arrXml_TagResult