Agora vou fazer ler um xml, e colocar os dados da turma no looper
selecionar no looper e abrir outro looper com relacao de alunos
e selecionar alunos e mostrar dados
Abaixo vou colocar os fontes feito no exemplo
// vou fazer planos
// primeira Parte ir plano 1
MyWindow..Plane=1
// Segunda Parte ler Xml
// Ler Xml
// Vou Colocar Blog
EDT_NomeArquivoXml="e:\aleva\aluno.xml" // aqui coloquei arquivo fixo é so mudar ou receber
s_xml_documento is string=EDT_NomeArquivoXml
s_meu_Xml is string=fLoadText(s_xml_documento)
EDT_xml_conteudo=s_meu_Xml // Aqui mostra o conteudo do xml
//vou simular turmas
LooperDeleteAll(LOOP_turma) // Elimina Looper Anterior // aqui eliminei dados looper
funcao_xml_retira_tag_turma(s_meu_Xml) // aqui chamei funcao turma // vou mostrar
PROCEDURE funcao_xml_retira_tag_turma(s_texto_completo is string)
// essa funcao vou disponibilizar blog
s_nome_tag_inicial is string="<turma>"
s_nome_tag_final is string="</turma>"
arr_turma is array of string
s_resultado is string=""
nPosicaoInicial, nPosicaoFinal is int = 0
nPosicaoInicial = PositionOccurrence(s_texto_completo,s_nome_tag_inicial,firstRank,FromBeginning) + Length(s_nome_tag_inicial)
nPosicaoFinal = PositionOccurrence(s_texto_completo,s_nome_tag_final,firstRank,FromBeginning)
LOOP
IF nPosicaoFinal=0 OR nPosicaoInicial=0 THEN
BREAK
ELSE
s_resultado = Middle(s_texto_completo,nPosicaoInicial,nPosicaoFinal-nPosicaoInicial)
FOR i=1 TO arr_turma..Occurrence // fiz isso para saber se ja tem alguma turma igual
IF arr_turma[i]=s_resultado THEN
s_resultado=""
BREAK
END
END
IF s_resultado<>"" THEN // caso nao tiver turma igual, mando adicionar array
ArrayAdd(arr_turma,s_resultado)
END
nPosicaoInicial = PositionOccurrence(s_texto_completo,s_nome_tag_inicial,nextRank,FromBeginning) + Length(s_nome_tag_inicial)
nPosicaoFinal = PositionOccurrence(s_texto_completo,s_nome_tag_final,nextRank,FromBeginning)
END
END
ArraySort(arr_turma,asAscending) // aqui estou classificando por ordem da turma
FOR i=1 TO arr_turma..Occurrence
LooperAddLine(LOOP_turma,arr_turma[i]) // adiciona linha // aqui estou adicionando linhas
END
// Terceira parte Ler a turma e ir para plano 2
EDT_turma=LOOP_turma.ATT_Turma // selecionando turma
MyWindow..Plane=2
// Ler alunos turma
// quarta parte ler aunos turma
s_xml_documento is string=EDT_NomeArquivoXml
s_meu_Xml is string=fLoadText(s_xml_documento)
EDT_xml_conteudo=s_meu_Xml // Aqui mostra o conteudo do xml
//vou simular turmas
LooperDeleteAll(LOOP_alunos) // Elimina Looper Anterior
funcao_xml_retira_tag_alunos(s_meu_Xml) // vou entrar funcao alunos
PROCEDURE funcao_xml_retira_tag_alunos(s_texto_completo is string)
// essa funcao do retira tag alunos
// criei uma array para cada tag
arr_aluno is array of string
arr_matricula is array of string
arr_data_nasc is array of string
arr_curso is array of string
arr_turma is array of string
s_resultado is string=""
s_nome_tag_inicial is string="<turma>"
s_nome_tag_final is string="</turma>"
//minha tag inicial turma e depois vou buscar em ordem as outras tag desse aluno
// por isso pediu para colocar em ordem
nPosicaoInicial, nPosicaoFinal is int = 0
nPosicaoInicial = PositionOccurrence(s_texto_completo,s_nome_tag_inicial,firstRank,FromBeginning) + Length(s_nome_tag_inicial)
nPosicaoFinal = PositionOccurrence(s_texto_completo,s_nome_tag_final,firstRank,FromBeginning)
LOOP
IF nPosicaoFinal=0 OR nPosicaoInicial=0 THEN
BREAK
ELSE
s_resultado = Middle(s_texto_completo,nPosicaoInicial,nPosicaoFinal-nPosicaoInicial)
IF s_resultado=EDT_turma THEN // aqui verifico se é a mesma turma
ArrayAdd(arr_turma,s_resultado)
//
s_nome_tag_inicial="<matricula>"
s_nome_tag_final="</matricula>"
nPosicaoInicial = PositionOccurrence(s_texto_completo,s_nome_tag_inicial,nextRank,FromBeginning) + Length(s_nome_tag_inicial)
nPosicaoFinal = PositionOccurrence(s_texto_completo,s_nome_tag_final,nextRank,FromBeginning)
s_resultado = Middle(s_texto_completo,nPosicaoInicial,nPosicaoFinal-nPosicaoInicial)
ArrayAdd(arr_matricula,s_resultado)
//
s_nome_tag_inicial="<aluno>"
s_nome_tag_final="</aluno>"
nPosicaoInicial = PositionOccurrence(s_texto_completo,s_nome_tag_inicial,nextRank,FromBeginning) + Length(s_nome_tag_inicial)
nPosicaoFinal = PositionOccurrence(s_texto_completo,s_nome_tag_final,nextRank,FromBeginning)
s_resultado = Middle(s_texto_completo,nPosicaoInicial,nPosicaoFinal-nPosicaoInicial)
ArrayAdd(arr_aluno,s_resultado)
//
s_nome_tag_inicial="<data_nasc>"
s_nome_tag_final="</data_nasc>"
nPosicaoInicial = PositionOccurrence(s_texto_completo,s_nome_tag_inicial,nextRank,FromBeginning) + Length(s_nome_tag_inicial)
nPosicaoFinal = PositionOccurrence(s_texto_completo,s_nome_tag_final,nextRank,FromBeginning)
s_resultado = Middle(s_texto_completo,nPosicaoInicial,nPosicaoFinal-nPosicaoInicial)
ArrayAdd(arr_data_nasc,s_resultado)
//
//
s_nome_tag_inicial="<curso>"
s_nome_tag_final="</curso>"
nPosicaoInicial = PositionOccurrence(s_texto_completo,s_nome_tag_inicial,nextRank,FromBeginning) + Length(s_nome_tag_inicial)
nPosicaoFinal = PositionOccurrence(s_texto_completo,s_nome_tag_final,nextRank,FromBeginning)
s_resultado = Middle(s_texto_completo,nPosicaoInicial,nPosicaoFinal-nPosicaoInicial)
ArrayAdd(arr_curso,s_resultado)
//
END
s_nome_tag_inicial="<turma>"
s_nome_tag_final="</turma>"
nPosicaoInicial = PositionOccurrence(s_texto_completo,s_nome_tag_inicial,nextRank,FromBeginning) + Length(s_nome_tag_inicial)
nPosicaoFinal = PositionOccurrence(s_texto_completo,s_nome_tag_final,nextRank,FromBeginning)
END
END
// eliminei o sort nessa parte
FOR i=1 TO arr_turma..Occurrence
LooperAddLine(LOOP_alunos,arr_aluno[i],arr_matricula[i],arr_data_nasc[i],arr_curso[i],arr_turma[i]) //aqui gravando looper
END