Condividi:        

[XML] Generare un file xml.

Hai problemi con i file Zip, vuoi formattare l'HD, non sai come funziona FireFox? O magari ti serve proprio quel programmino di cui non ricordi il nome! Ecco il forum dove poter risolvere i tuoi problemi.

Moderatori: Dylan666, hydra, gahan

[XML] Generare un file xml.

Postdi sbs » 10/12/21 19:32

Ho un problema inerente dei file xml.
Avevo un programma che mi generava file funzionali in xml.
Attualmente ho alcuni file generati dal vecchio programma.
Usando uno di essi ho ottenuto il file XSD

Codice: Seleziona tutto
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="dataroot">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="evento">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="partecipante" maxOccurs="unbounded" minOccurs="0">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="professione">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element type="xs:byte" name="disciplina"/>
                        </xs:sequence>
                        <xs:attribute type="xs:byte" name="cod_prof" use="optional"/>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute type="xs:string" name="cod_fisc" use="optional"/>
                  <xs:attribute type="xs:string" name="nome" use="optional"/>
                  <xs:attribute type="xs:string" name="cognome" use="optional"/>
                  <xs:attribute type="xs:string" name="ruolo" use="optional"/>
                  <xs:attribute type="xs:string" name="lib_dip" use="optional"/>
                  <xs:attribute type="xs:byte" name="part_reclutato" use="optional"/>
                  <xs:attribute type="xs:float" name="cred_acq" use="optional"/>
                  <xs:attribute type="xs:date" name="data_acq" use="optional"/>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute type="xs:string" name="cod_org"/>
            <xs:attribute type="xs:byte" name="cod_obi"/>
            <xs:attribute type="xs:date" name="data_ini"/>
            <xs:attribute type="xs:short" name="num_part"/>
            <xs:attribute type="xs:byte" name="cod_tipologia_form"/>
            <xs:attribute type="xs:byte" name="ore"/>
            <xs:attribute type="xs:byte" name="cod_edi"/>
            <xs:attribute type="xs:byte" name="tipo_form"/>
            <xs:attribute type="xs:string" name="tipo_eve"/>
            <xs:attribute type="xs:float" name="crediti"/>
            <xs:attribute type="xs:date" name="data_fine"/>
            <xs:attribute type="xs:short" name="cod_evento"/>
            <xs:attribute type="xs:byte" name="cod_accr"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>


E ho un file csv con i dati che devo usare
Esempio csv

Codice: Seleziona tutto
 cod_org;cod_obi;data_ini;num_part;cod_tipologia_form;ore;cod_edi;tipo_form;tipo_eve;crediti;data_fine;cod_evento;cod_accr;cod_fisc;nome;cognome;ruolo;lib_dip;part_reclutato;cred_acq;data_acq;cod_prof;disciplina
PG20120132780;6;01/10/2019;368;13;6;3;1;E;6;31/12/2019;2703;80;CLNGLC60B20A944W;GIAN LUCA;CALANCHI;P;D;0;6;31/12/2019;1;9
PG20120132780;6;01/10/2019;368;13;6;3;1;E;6;31/12/2019;2703;80;CNTMLN76M52H294M;MARIA ELENA;CANTARINI;P;D;0;6;31/12/2019;1;24
PG20120132780;6;01/10/2019;368;13;6;3;1;E;6;31/12/2019;2703;80;BRLMRT66E42G768R;MARTA;BORELLINI;P;D;0;6;31/12/2019;12;82
PG20120132780;6;01/10/2019;368;13;6;3;1;E;6;31/12/2019;2703;80;BGNFPP96A26F257W;FILIPPO;BAGNOLI;P;L;0;6;31/12/2019;14;85

Ipotesi uno trovare una soluzione che mi faccia convertire il file partendo da queste due fonti.
Ipotesi due usare Excel e generare il file.
Ho realizzato un file con 3 fogli, il primo con i dati dei partecipanti, il secondo con i dati dell’evento il terzo con il pulsante e le formule.

Ho recuperato due script ma ho alcuni problemi.
Codice: Seleziona tutto
Sub PARTENZA()

        Sheets("XML").Select
        Range("A1:A4").Select
        Application.DisplayAlerts = False
        Selection.Copy
        Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
   ActiveWorkbook.SaveAs Filename:="d:\prova.txt", FileFormat:=xlText, CreateBackup:=False

     
        Call PARTI
   
End Sub


   
    Sub PARTI()

    Dim Iniz As String, myCol As Long, I As Long
    Iniz = "A5"    '<<** La cella col primo nome da esaminare
    myCol = Range(Iniz).Column
    For I = Range(Iniz).Row To Range(Iniz).Offset(5000, 0).End(xlUp).Row
            [A1] = Cells(I, myCol).Value
            [B1] = Cells(I, myCol + 1).Value
            [C1] = Cells(I, myCol + 2).Value
            [D1] = Cells(I, myCol + 3).Value
            [E1] = Cells(I, myCol + 4).Value
            [F1] = Cells(I, myCol + 5).Value
            [G1] = Cells(I, myCol + 6).Value
            [H1] = Cells(I, myCol + 7).Value
            [I1] = Cells(I, myCol + 8).Value
            [J1] = Cells(I, myCol + 9).Value

    ‘Call ATAK
    Next I
   
End Sub


Il primo script PARTIRE copia su un file di testo la prima parte del file generato con una formula di unione in un file di testo poi passa il gioco al secondo PARTI che salta una riga e passa il campo ad una 3 ATAK che non ho ancora trovato che dovrebbe “attaccare (aggiungere)” la riga posta nel foglio BASE in A20 e ritornare a PARTI che se esistono nuove righe ripete il loop su ATAK.
Se non vi sono nuove righe occorre saltare ad una quarta FINE che attacca la riga BASE A22 e salva il file.
Il file dopo deve essere codificato come utf8.

il file excell è questo https://docs.google.com/spreadsheets/d/ ... ue&sd=true
Avatar utente
sbs
Utente Senior
 
Post: 114
Iscritto il: 18/09/10 11:25

Sponsor
 

Re: [XML] Generare un file xml.

Postdi Dylan666 » 10/12/21 21:56

se è una tantum questo è meno banale di quanto sembri ma manca la parte XSD (sebbene supporti i template):
https://www.convertcsv.com/csv-to-xml.htm
Avatar utente
Dylan666
Moderatore
 
Post: 39988
Iscritto il: 18/11/03 16:46

Re: [XML] Generare un file xml.

Postdi sbs » 11/12/21 10:49

Interessante!
Devo capire come funzionano i modelli....

Per adesso sto andando avanti con il file Excel modificando le macro.

Ho trovato una macro per scrivere aggiungendo righe alla prima cella vuota.
Ho ancora dei problemi
1) Le date non formattate mm-gg-aaaa
2) La macro AVANZA sembra non funzionare
Non ho idea di come chiudere la serie
Finite le righe aggiungere BASE A22, salvare il Foglio2 in un file txt codificato utf8 e cancellare il foglio2
Codice: Seleziona tutto
Sub PARTENZA()
        Sheets("XML").Select
        Range("A1:A4").Select
Selection.Copy
Sheets("Foglio2").Select
Range("A65000").End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
                     
        Call AVANZA
   
End Sub


 
    Sub AVANZA()

    Dim Iniz As String, myCol As Long, I As Long
    Iniz = "A5"    '<<** La cella col primo nome da esaminare
    myCol = Range(Iniz).Column
    For I = Range(Iniz).Row To Range(Iniz).Offset(5000, 0).End(xlUp).Row
            [A1] = Cells(I, myCol).Value
            [B1] = Cells(I, myCol + 1).Value
            [C1] = Cells(I, myCol + 2).Value
            [D1] = Cells(I, myCol + 3).Value
            [E1] = Cells(I, myCol + 4).Value
            [F1] = Cells(I, myCol + 5).Value
            [G1] = Cells(I, myCol + 6).Value
            [H1] = Cells(I, myCol + 7).Value
            [I1] = Cells(I, myCol + 8).Value
            [J1] = Cells(I, myCol + 9).Value

    Call AGGIUNGI
    Next I
   
End Sub

    Sub AGGIUNGI()
    Sheets("BASE").Select
    Range("A20").Select
    Selection.Copy
    Sheets("foglio2").Select
    Range("A65000").End(xlUp).Offset(1, 0).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
End Sub



Avatar utente
sbs
Utente Senior
 
Post: 114
Iscritto il: 18/09/10 11:25

Re: [XML] Generare un file xml.

Postdi sbs » 11/12/21 11:07

Dylan666 ha scritto:se è una tantum questo è meno banale di quanto sembri ma manca la parte XSD (sebbene supporti i template):
https://www.convertcsv.com/csv-to-xml.htm


Non capisco come creare il templete daal file xsd.....
Avatar utente
sbs
Utente Senior
 
Post: 114
Iscritto il: 18/09/10 11:25

Re: [XML] Generare un file xml.

Postdi Dylan666 » 11/12/21 14:21

Ma a te il file XSD a cosa serve? Non sai se i dati del CSV sono validi?
Perché a quello serve il file XSD, a convalidare un XML
https://www.w3schools.com/xml/schema_intro.asp

Perché no ci posti un esempio del file XML che vorresti basato sul CSV che hai mostrato?
Avatar utente
Dylan666
Moderatore
 
Post: 39988
Iscritto il: 18/11/03 16:46

Re: [XML] Generare un file xml.

Postdi sbs » 11/12/21 16:02

Il file xsd serve anche per definire la struttura del file se guardi il csv vi sono una serie di dati che si ripetono,
Alcuni dati ripetuti sono da mettere all'inizio, poi si ripete la parte del partecipante. sotto vedi un esempio (una parte del file originale che era da circa 900 partecipanti!)



Vengono formattati così:
Codice: Seleziona tutto
<?xml version="1.0" encoding="ISO-8859-1"?>
<dataroot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<evento cod_org="xxxxxxxxxxxxxxxxxxx" cod_obi="6" data_ini="2019-10-01" num_part="888" cod_tipologia_form="13" ore="6" cod_edi="3" tipo_form="1" tipo_eve="E" crediti="6.0" data_fine="2019-12-31" cod_evento="99999" cod_accr="999999">

<partecipante cod_fisc="aaabbbb00z00a000a" nome="LUCA" cognome="BIANCHI" ruolo="P" lib_dip="D" part_reclutato="0" cred_acq="6.0" data_acq="2019-12-31">
<professione cod_prof="1">
<disciplina>9</disciplina></professione></partecipante>


<partecipante cod_fisc="aaabbbb00z00a000a" nome="LUCA" cognome="BIANCHI" ruolo="P" lib_dip="D" part_reclutato="0" cred_acq="6.0" data_acq="2019-12-31">
<professione cod_prof="1">
<disciplina>9</disciplina></professione></partecipante>

<partecipante cod_fisc="aaabbbb00z00a000a" nome="LUCA" cognome="BIANCHI" ruolo="P" lib_dip="D" part_reclutato="0" cred_acq="6.0" data_acq="2019-12-31">
<professione cod_prof="1">
<disciplina>9</disciplina></professione></partecipante>


</evento>
</dataroot>
Avatar utente
sbs
Utente Senior
 
Post: 114
Iscritto il: 18/09/10 11:25


Torna a Software Windows


Topic correlati a "[XML] Generare un file xml.":


Chi c’è in linea

Visitano il forum: Nessuno e 78 ospiti