Boa Noite Pessoal Preciso de uma ajuda um cliente solicitou à extração dos dados para um determinado bi, onde vou precisar extrair as informações do banco e gerar arquivo xml da mesma para importação nesse bi gostaria de saber alguém tem experiência com xml e poderia me ajudar a como gerar o arquivo xml, pois já sei todas às as tabelas que irei precisar para realizar a geração do mesmo mas não sei como gerar o arquivo xml em sim alguem poderia me ajduar?
Segue abaixo um exemplo.....mas se precisar de maiores informações você pode consultar o help, pois existem várias formas de gerar o xml, essa é apenas uma.... /*Variáveis para o xml*/ DEFINE VARIABLE hDocxml AS HANDLE NO-UNDO. DEFINE VARIABLE hRootxml AS HANDLE NO-UNDO. DEFINE VARIABLE hRow AS HANDLE NO-UNDO. DEFINE VARIABLE hRow1 AS HANDLE NO-UNDO. DEFINE VARIABLE hRow2 AS HANDLE NO-UNDO. DEFINE VARIABLE hRow3 AS HANDLE NO-UNDO. DEFINE VARIABLE hField AS HANDLE NO-UNDO. DEFINE VARIABLE hText AS HANDLE NO-UNDO. DEFINE VARIABLE hBuf AS HANDLE NO-UNDO. DEFINE VARIABLE hDBFld AS HANDLE NO-UNDO. DEFINE VARIABLE ix AS INTEGER NO-UNDO. DEFINE VARIABLE longstring AS LONGCHAR NO-UNDO. /*Cria os objetos para o xml.*/ CREATE X-DOCUMENT hDocxml. CREATE X-NODEREF hRootxml. CREATE X-NODEREF hRow. CREATE X-NODEREF hRow1. CREATE X-NODEREF hRow2. CREATE X-NODEREF hRow3. CREATE X-NODEREF hField. CREATE X-NODEREF hText. /*Cria um buffer para usar mais a frente pode ser sua temp-table ou sua propria tabela.*/ hBuf = BUFFER SuaTabela:HANDLE. /*Cria a tag principal ou seja tag mae*/ hDocxml:CREATE-NODE(hRootxml,"TagMae","ELEMENT"). hDocxml:APPEND-CHILD(hRootxml). /*Se precisar inserir alguma coisa dentro da tag exemplo <tag xxxx= yyyy ></tag> use este comando.*/ hRootxml:set-attribute("xxxx","yyyy"). /*Cria a tag filha da tag principal (tag mae que foi criada acima)*/ hDocxml:CREATE-NODE(hRow,"FilhaTagMae","ELEMENT"). hRootxml:APPEND-CHILD(hRow). /*For each da Da sua tabela que deseja gerar o xml*/ FOR EACH SuaTabela: /*cria uma tag filha para a tag FilhaTagMae*/ hDocxml:CREATE-NODE(hRow1,"SubFilha","ELEMENT"). hRow:APPEND-CHILD(hRow1). /*Faz o repeat conforme o numero de campos que existir no buffer criado acima*/ REPEAT ix = 1 TO hBuf:NUM-FIELDS: /*Criar um buffer dos campos*/ hDBFld = hBuf:BUFFER-FIELD(ix). /*verifica se existe o campo passado da tabela no buffer*/ IF hDBFld:NAME = "SuaTabela.PrimeiroCampo" OR hDBFld:NAME = "Name" THEN NEXT. /*Aqui ele cria as tags conforme os campos Existentes na Sua tabela*/ hDocxml:CREATE-NODE(hField, hDBFld:NAME, "ELEMENT"). hRow1:APPEND-CHILD(hField). /*cria A variavel para iserir valor*/ hDocxml:CREATE-NODE(hText, "", "TEXT"). hField:APPEND-CHILD(hText). /*Insere o valor nas tags*/ hText:NODE-VALUE = STRING(hDBFld:BUFFER-VALUE). END. /*Fim do repeatt*/ end. /*Fim do for each */ /*Aqui é um exemplo de como criar uma parte estatica do xml não é muito dificil, apenas tem que fazer a assossiação dos filhos com os pais.*/ hDocxml:CREATE-NODE(hRow2,"SubTag","ELEMENT"). hRootxml:APPEND-CHILD(hRow2). hDocxml:CREATE-NODE(hRow1,"Filha1","ELEMENT"). hRow2:APPEND-CHILD(hRow1). hDocxml:CREATE-NODE(hText, "", "TEXT"). hRow1:APPEND-CHILD(hText). hText:NODE-VALUE = /*Valor que a tag vai receber*/. hDocxml:CREATE-NODE(hRow1,"Filha2","ELEMENT"). hRow2:APPEND-CHILD(hRow1). hDocxml:CREATE-NODE(hText, "", "TEXT"). hRow1:APPEND-CHILD(hText). hText:NODE-VALUE = /*Valor que a tag vai receber*/. hDocxml:CREATE-NODE(hRow1,"Filha3","ELEMENT"). hRow2:APPEND-CHILD(hRow1). hDocxml:CREATE-NODE(hText, "", "TEXT"). hRow1:APPEND-CHILD(hText). hText:NODE-VALUE = /*Valor que a tag vai receber*/. hDocxml:CREATE-NODE(hRow1,"Filha4","ELEMENT"). hRow2:APPEND-CHILD(hRow1). hDocxml:CREATE-NODE(hText, "", "TEXT"). hRow1:APPEND-CHILD(hText). hText:NODE-VALUE = /*Valor que a tag vai receber*/. hDocxml:CREATE-NODE(hRow3,"SubTag1","ELEMENT"). hRootxml:APPEND-CHILD(hRow3). hDocxml:CREATE-NODE(hText, "", "TEXT"). hRow3:APPEND-CHILD(hText). hText:NODE-VALUE = /*Valor que a tag vai receber*/. /*Aqui vai o diretorio que deseja salvar o aqurquivo xml*/ hDocxml:SAVE("file":U,"C:\Pastas\NomedoArquivo.xml":U). /*Aqui ele transforma o xml em uma longstring isso serve para enviar para webservice*/ /*hDocxml:SAVE("longchar", ConsultaValorEnvia).*/ /*Deleta os objetos da menoria.*/ DELETE OBJECT hDocxml. DELETE OBJECT hRootxml. DELETE OBJECT hRow. DELETE OBJECT hRow1. DELETE OBJECT hRow2. DELETE OBJECT hField. DELETE OBJECT hText. /*Espero que ajude, se tiver mais dúvidas poste novamente......*/
Uma pergunta me enviaram um arquivo xsd e me disseram que ele é um arquivo de modelo como faço para gerar o xml usando o xsd?
Caro amigo, Não sei que arquivo é este que você mencionou, mas vou tentar explicar como montei o meu com o exemplo que postei antes. Primeiro eu recebi um arquivo de exemplo wsdl que é como eu deveria montar o xml para enviar para o web serveci conformes este arquivo de exemplo. Bom vamos supor que meu arquivo de exemplo seja este <tag mae> <tag filha 1> valor </ tag filha 1> <tag filha 2> valor 1 </tag filha 2> </tag mae> então eu criei uma temp-table com os valore respectivos as tags filhas, pois a tag mae eu teria que criar estática e não dinamica. então você poderia criar um temp com os campos que devem ser dinamicos, e o que são estaticos no braço. no post anterior mostro as duas formas de criar tanto dinamico como estatico. se tiver mais uma duvida posta novamente. mas não e dificil, se você ver bem o exemplo anterior e so substituir o nome da tabela pela sua temp, e colocar os campos estatiticos você faz no braço.