+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 10 su 10

Discussione: XML o Json

  1. #1
    L'avatar di dante.3d
    dante.3d non è in linea Scolaretto
    Post
    82

    XML o Json

    Ciao a Tutti..
    avrei bisogno di creare un file XML..
    qual'è il metodo migliore per poterlo fare con Delphi???

    Per ignoranza le poche volte, l'ho sempre fatto a "manima" con un array di stringhe..

    ma esiste un metodo rapido utilizzando tutta la struttura??
    esistono dei tool per creare la struttura in auto!??
    oppure un intera Unit con i metodi per creare il file finale??

    mi potete dire come fare?? o dove documentarmi??

    io ho solo il file XML.. non ho XSD..

    cortesemente potete illuminarmi???
    grazie a tutti..

  2. #2
    L'avatar di _alka_
    _alka_ non è in linea Very Important Person
    Luogo
    Reggio Emilia
    Post
    1,111
    Quote Originariamente inviato da dante.3d Visualizza il messaggio
    avrei bisogno di creare un file XML..
    Per creare un file XML è possibile utilizzare il componente TXMLDocument, che puoi inserire sul Form oppure istanziare direttamente da codice.

    Per avere esempi di codice su come chiamare i metodi che espone, puoi leggere la documentazione in linea.

    P.S.: nel titolo della discussione hai nominato JSON, ma poi non hai fatto alcun riferimento...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Homepage | Blog | Delphi Podcast | Delphi Succinctly (e-book)

  3. #3
    L'avatar di dante.3d
    dante.3d non è in linea Scolaretto
    Post
    82
    Non riesco a capire..
    come procedo se devo crearlo da zero.. carico il file xml (simile) nell TXMLDocument..
    poi lo modifico oppure come posso partire da 0??

    ecco il mio file..
    codice:
    <chart caption="Pianificazione Fasci - Industria 4.0" subcaption="Pianificato vs Consuntivato" dateformat="dd/mm/yyyy hh:mm:ss" outputdateformat="ddds mns yy" ganttwidthpercent="60" ganttpaneduration="40" ganttpanedurationunit="d" plottooltext="$processName{br} $label starting date $start{br}$label ending date $end" legendborderalpha="0" flatscrollbars="1" gridbordercolor="#333333" gridborderalpha="20" slackfillcolor="#e44a00" taskbarfillmix="light+0" theme="fusion">
        <categories bgcolor="#999999">
            <category start="03/12/2018" end="16/12/2018" label="49-50 Settimana" align="middle" fontcolor="#ffffff" fontsize="12" />
        </categories>
        <categories bgcolor="#999999" align="middle" fontcolor="#ffffff" fontsize="12">
            <category start="03/12/2018" end="09/12/2018" label="49 Settimana" />
    		<category start="10/12/2018" end="16/12/2018" label="50 Settimana" />        
        </categories>
        
        <processes headertext="Task" fontcolor="#000000" fontsize="11" isanimated="1" bgcolor="#6baa01" headervalign="bottom" headeralign="left" headerbgcolor="#999999" headerfontcolor="#ffffff" headerfontsize="12" align="left" isbold="1" bgalpha="25">
            <process label="1-Fascio E-308A" id="1" />
            <process label="2-Mandrinatura P Fissa" id="2" hoverbandcolor="#e44a00" hoverbandalpha="40" />
            <process label="3-Bloccaggio Flottante" id="3" hoverbandcolor="#e44a00" hoverbandalpha="40" />
            <process label="4-Mandrinatura Flottante" id="4" hoverbandcolor="#e44a00" hoverbandalpha="40" />
            <process label="5-Fresatura Flottante" id="5" hoverbandcolor="#e44a00" hoverbandalpha="40" />                
        </processes>
        <datatable showprocessname="1" namealign="left" fontcolor="#000000" fontsize="10" valign="right" align="center" headervalign="bottom" headeralign="center" headerbgcolor="#999999" headerfontcolor="#ffffff" headerfontsize="12">
            <datacolumn bgcolor="#eeeeee" headertext="Attuale{br}Start{br}Date">
                <text label="3/12/2018" />
                <text label="3/12/2018" />
                <text label="6/12/2018" bgcolor="#e44a00" bgalpha="40" />
                <text label="9/12/2018" bgcolor="#e44a00" bgalpha="40" />
                <text label="10/12/2018" bgcolor="#e44a00" bgalpha="40" />            
            </datacolumn>
            <datacolumn bgcolor="#eeeeee" headertext="Attuale{br}End{br}Date">
                <text label="30/12/2018" />
                <text label="30/12/2018" bgcolor="#e44a00" bgalpha="40" />
                <text label="30/12/2018" bgcolor="#e44a00" bgalpha="40" />
                <text label="30/12/2018" />
                <text label="30/12/2018" />            
            </datacolumn>
        </datatable>
        <tasks>        
            <task label="Eseguito" processid="1" start="3/12/2018" end="4/12/2018" id="1" color="#6baa01" toppadding="56%" height="32%" />
    		<task label="Eseguito" processid="2" start="4/12/2018 12:45:66" end="4/12/2018 16:22:66" id="1-1" color="#6baa01" toppadding="56%" height="32%" />
    		<task label="Eseguito" processid="3" start="4/12/2018 16:26:42" end="6/12/2018 12:51:12" id="2" color="#6baa01" toppadding="56%" height="32%" />
    		<task label="Eseguito" processid="4" start="3/12/2018" end="6/12/2018" id="1-1" color="#6baa01" toppadding="56%" height="32%" />
    		<task label="Eseguito" processid="5" start="3/12/2018" end="6/12/2018" id="4" color="#6baa01" toppadding="56%" height="32%" />
    		<task label="Eseguito" processid="6" start="3/12/2018" end="6/12/2018" id="5" color="#6baa01" toppadding="56%" height="32%" />
    		<task label="Eseguito" processid="7" start="3/12/2018" end="6/12/2018" id="6" color="#6baa01" toppadding="56%" height="32%" />        
        </tasks>
        <connectors>
            <connector fromtaskid="1" totaskid="2" color="#008ee4" thickness="2" fromtaskconnectstart_="1" />
            <connector fromtaskid="2" totaskid="3" color="#008ee4" thickness="2" />
            <connector fromtaskid="3-2" totaskid="4" color="#008ee4" thickness="2" />
            <connector fromtaskid="3-2" totaskid="6" color="#008ee4" thickness="2" />        
        </connectors>
        <milestones>
            <milestone date="4/12/2018" taskid="1" color="#f8bd19" shape="star" tooltext="Completata fase 1" />
        </milestones>
        <legend>
            <item label="Pianificato" color="#008ee4" />
            <item label="Attuale" color="#6baa01" />
            <item label="Slittato (Ritardo)" color="#e44a00" />
        </legend>
    </chart>

  4. #4
    L'avatar di _alka_
    _alka_ non è in linea Very Important Person
    Luogo
    Reggio Emilia
    Post
    1,111
    Quote Originariamente inviato da dante.3d Visualizza il messaggio
    Non riesco a capire..
    come procedo se devo crearlo da zero..
    Ti ho girato un link alla documentazione.
    Hai dato una occhiata all'esempio implementato nella procedura CreateDocument?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Homepage | Blog | Delphi Podcast | Delphi Succinctly (e-book)

  5. #5
    L'avatar di dante.3d
    dante.3d non è in linea Scolaretto
    Post
    82
    Si è questa..
    codice:
    procedure CreateDocument;
    var
      LDocument: IXMLDocument;
      LNodeElement, NodeCData, NodeText: IXMLNode;
    begin
      LDocument := TXMLDocument.Create(nil);
      LDocument.Active := True;
    
      { Define document content. }
      LDocument.DocumentElement := LDocument.CreateNode('ThisIsTheDocumentElement', ntElement, '');
      LDocument.DocumentElement.Attributes['attrName'] := 'attrValue';
      LNodeElement := LDocument.DocumentElement.AddChild('ThisElementHasText', -1);
      LNodeElement.Text := 'Inner text.';
      NodeCData := LDocument.CreateNode('any characters here', ntCData, '');
      LDocument.DocumentElement.ChildNodes.Add(NodeCData);
      NodeText := LDocument.CreateNode('This is a text node.', ntText, '');
      LDocument.DocumentElement.ChildNodes.Add(NodeText);
    
      LDocument.SaveToFile(DestPath);
    end;
    ma non capisco.. quali sono i vantaggi..
    e soprattuto non capisco come usarla in senso pratico..

  6. #6
    L'avatar di _alka_
    _alka_ non è in linea Very Important Person
    Luogo
    Reggio Emilia
    Post
    1,111
    Quote Originariamente inviato da dante.3d Visualizza il messaggio
    ma non capisco.. quali sono i vantaggi..
    e soprattuto non capisco come usarla in senso pratico..
    I vantaggi sono derivanti dal fatto che costruire stringhe è una pratica prona a errori, mentre qui si vanno a creare gli elementi (es. con CreateNode), gli attributi (es. Attributes['attrName'] := 'attrValue'), gli elementi figli (es. AddChild), in breve si costruisce il documento XML basandosi sulla struttura che deve avere e si lascia al componente l'onere di generare il testo scrivendolo in un path di output (es. con SaveToFile).

    In senso pratico devi fare la chiamate ai metodi corretti che creano gli elementi e gli attributi in modo da generare quelli che ci si aspetta di avere nel documento XML finale, e poi è possibile salvare o esportare il file XML generato.

    Francamente non saprei cosa altro aggiungere perché non capisco quale sia il dubbio: il file XML è un testo che descrive una struttura gerarchica ad albero di elementi e di attributi, così come il componente consente di crearli individualmente producendo questa struttura e permettendo di salvarla su file nel formato testuale XML che siamo abituati a vedere come rappresentazione.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Homepage | Blog | Delphi Podcast | Delphi Succinctly (e-book)

  7. #7
    L'avatar di dante.3d
    dante.3d non è in linea Scolaretto
    Post
    82
    Quote Originariamente inviato da _alka_ Visualizza il messaggio
    I vantaggi sono derivanti dal fatto che costruire stringhe è una pratica prona a errori, mentre qui si vanno a creare gli elementi (es. con CreateNode), gli attributi (es. Attributes['attrName'] := 'attrValue'), gli elementi figli (es. AddChild), in breve si costruisce il documento XML basandosi sulla struttura che deve avere e si lascia al componente l'onere di generare il testo scrivendolo in un path di output (es. con SaveToFile).

    In senso pratico devi fare la chiamate ai metodi corretti che creano gli elementi e gli attributi in modo da generare quelli che ci si aspetta di avere nel documento XML finale, e poi è possibile salvare o esportare il file XML generato.

    Francamente non saprei cosa altro aggiungere perché non capisco quale sia il dubbio: il file XML è un testo che descrive una struttura gerarchica ad albero di elementi e di attributi, così come il componente consente di crearli individualmente producendo questa struttura e permettendo di salvarla su file nel formato testuale XML che siamo abituati a vedere come rappresentazione.
    Ti giuro che non riesco a capire.. sarò deficente..
    ma devo usate un sono TXMLDocument??

    puoi farmi un esempio per scrivere questo XML???

    codice:
    <grafico caption="Titolo 1" subcaption="titolo2" >
        <categorie colore="rosso">
            <categoria inizio="01/01/2018" fine="31/01/2018" etichetta="prova1" />
        </categorie>
        <categorie colore="verde">
            <categoria inizio="01/02/2018" fine="29/02/2018" etichetta="prova2" />
    		<categoria inizio="01/03/2018" fine="31/03/2018" etichetta="prova3" />        
        </categorie>   
        <processi testo="attività" colore="nero">
            <processo etichetta="1-Processo" id="1" />
            <processo etichetta="2-Processo" id="2" colore="giallo" />        
        </processi>
        <tabella parametro1="1" allineamento="left">
            <colonna colsfondo="fuxia" headertext="Attuale{br}Start{br}Date">
                <text etichetta="01/04/2018" colore="nero"/>
                <text etichetta="01/05/2018" />
                            
            </colonna>
            <colonna colsfondo="fuxia" headertext="Attuale{br}End{br}Date">
                <text etichetta="01/06/2018" />
                <text etichetta="01/07/2018" colsfondo="giallo" bgalpha="bianco" />            
            </colonna>
        </tabella>
        <tasks>        
            <task etichetta="Eseguito" processo="1" />
    		<task etichetta="Eseguito" processo="2" />		
        </tasks>
    </grafico>

  8. #8
    L'avatar di dante.3d
    dante.3d non è in linea Scolaretto
    Post
    82
    Ho trovato questo esempio..
    ma non capisco come fare bene i nodi.. come annidarli..
    non capisco il meccanismo.. probabilmente sono stupido..
    sembra che prima assegni il nodo (non so controllare bene dove metterlo come assegnare la gerarchia) e poi assegni al nodo gli attributi..

    qui il codice in Delphi..

    codice:
    {...}
    Var
      XML : IXMLDOCUMENT;
      RootNode, CurNode : IXMLNODE;
    begin
      XML := NewXMLDocument;
      XML.Encoding := 'utf-8';
      XML.Options := [doNodeAutoIndent]; // viene meglio nell'Editor ;)
      RootNode := XML.AddChild('XML'); // nodo principale
      CurNode := RootNode.AddChild('Test'); //nodo sotto il principale ma riusa il nodo root :S
      CurNode := CurNode.AddChild('Test2'); //nodo sotto test
      CurNode.Text := 'Some Test 2 text';
      CurNode.Attributes['NewAttribute'] := 'Some Test2 Attribute Value'; //perchè gli attribiti dopo???
      XMl.SaveToFile('C:\Documents and Settings\a\Desktop\zulfa.xml'); //salva il file XML
    {...}
    Questo è il file XML creato..

    codice:
    <?xml version="1.0" encoding="utf-8"?>
    <XML>
      <Test>
        <Test2 NewAttribute="Some Test2 Attribute Value">Some Test 2 text</Test2>
      </Test>
    </XML>
    Notate l'orario non ci ho dormito!!
    Potete spiegarmi cortesemente come conviene procedere..
    quante variabili nodo creare??.. e come gestirle..
    grazie di cuore a chiunche fosse interessato
    Ultima modifica di dante.3d; 08-12-2018 05:25 

  9. #9
    L'avatar di systemgvp
    systemgvp non è in linea Scribacchino
    Post
    576
    Guarda, io uso questa procedura


    uses XMLIntf, XMLDoc;


    . . . . .



    var XML_Documento: IXMLDocument; XML_Nodo, XML_SottoNodo: IXMLNode;
    begin
    //imposta il documento
    XML_Documento := TXMLDocument.Create(nil);
    XML_Documento.Active := True;
    //macro elemento
    XML_Documento.DocumentElement := XML_Documento.CreateNode('elementi', ntElement, '');
    //proprietà del macro elemento
    XML_Documento.DocumentElement.Attributes['Attributo'] := 'ValoreAttributo';
    //+++++nodo 1
    XML_Nodo := XML_Documento.DocumentElement.AddChild('nodo1', -1);
    XML_Nodo.Attributes['AttributoNodo1'] := 'ValoreAttributo1';
    XML_Nodo.Attributes['AttributoNodo2'] := 'ValoreAttributo2';
    XML_Nodo.Attributes['AttributoNodo3'] := 'ValoreAttributo3';
    //-----sottonodo 1
    XML_SottoNodo := XML_Nodo.AddChild('sottonodo1', -1);
    XML_SottoNodo.Attributes['AttributoSottoNodo1'] := 'ValoreAttributo1';
    XML_SottoNodo.Text := 'Testo del sottonodo1 - nodo1';
    //-----sottonodo 2
    XML_SottoNodo := XML_Nodo.AddChild('sottonodo2', -1);
    XML_SottoNodo.Attributes['AttributoSottoNodo1'] := 'ValoreAttributo1';
    XML_SottoNodo.Attributes['AttributoSottoNodo2'] := 'ValoreAttributo2';
    XML_SottoNodo.Attributes['AttributoSottoNodo3'] := 'ValoreAttributo3';
    XML_SottoNodo.Text := 'Testo del sottonodo2 - nodo1';
    //+++++nodo 2
    XML_Nodo := XML_Documento.DocumentElement.AddChild('nodo2', -1);
    XML_Nodo.Attributes['AttributoNodo1'] := 'ValoreAttributo1';
    XML_Nodo.Attributes['AttributoNodo2'] := 'ValoreAttributo2';
    XML_Nodo.Attributes['AttributoNodo3'] := 'ValoreAttributo3';
    //-----sottonodo 1
    XML_SottoNodo := XML_Nodo.AddChild('sottonodo1', -1);
    XML_SottoNodo.Attributes['AttributoSottoNodo1'] := 'ValoreAttributo1';
    XML_SottoNodo.Text := 'Testo del sottonodo1 - nodo2';
    //-----sottonodo 2
    XML_SottoNodo := XML_Nodo.AddChild('sottonodo2', -1);
    XML_SottoNodo.Attributes['AttributoSottoNodo1'] := 'ValoreAttributo1';
    XML_SottoNodo.Attributes['AttributoSottoNodo2'] := 'ValoreAttributo2';
    XML_SottoNodo.Attributes['AttributoSottoNodo3'] := 'ValoreAttributo3';
    XML_SottoNodo.Text := 'Testo del sottonodo2 - nodo2';
    //salva il file
    XML_Documento.SaveToFile('C:\file.xml');
    end;


    Embarcadero RAD Studio 10.2.3 Tokyo - con Pascal dal 1992

  10. #10
    L'avatar di dante.3d
    dante.3d non è in linea Scolaretto
    Post
    82
    Grazie.. ho capito.. devo avere tante variabili nodo in base a quanti livello voglio annidare...
    sembra funzionare..

    un problema..
    ma perchè ogni volta che creo il file, questo viene accodato??

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi