Come creare file xml delphi. Guida di viaggio su Internet: tutto il divertimento sul web. Qualche parola sull'organizzazione del flusso di documenti
Ben arrivato! Questo blog parla di Internet e dei computer, o meglio è stato dedicato a loro.
Probabilmente, è subito chiaro che sul sito non sono comparsi nuovi articoli da molti anni. Sì, questo è il destino della maggior parte dei blog. Questo progetto una volta era un'impresa ambiziosa e l'autore, come molti altri che scrivevano all'epoca, aveva piani ambiziosi per diventare uno dei migliori blogger russi. Bene, se guardi ora, allora di quei blog che sono stati creati contemporaneamente al mio, la maggior parte è già scomparsa nell'eternità. E non ho avuto abbastanza tempo per scrivere sul blog. Quindi sì, non viene più aggiornato. Anche se una volta con questo sito abbiamo vinto il concorso "Blog of Runet 2011".
Ho anche avuto l'idea di cancellare tutto questo, ma poi ho rivisto i vecchi materiali, e ho capito che possono ancora essere utili ai lettori. Sì, alcuni articoli sono obsoleti (se ho abbastanza forza, riceveranno note appropriate), ma il sito, ad esempio, può essere utile per i principianti - qui puoi leggere concetti basilari Internet, impara come configurare Internet, Windows o anche decidere di passare a Linux. Quindi guarda le rubriche e scegli quella che fa per te.
Eppure, spero che questo sia più di un semplice blog, ma una vera guida a Internet. Il sito è visionabile in modalità directory, dove tutti gli articoli disponibili sono strutturati per categoria. E chissà, forse un giorno cominceranno ad apparire qui nuovi articoli di alta qualità.
Levigatrice
Picodi.ru è un portale di sconti di International Coupons, un esperto polacco in risparmi e acquisti economici. I polacchi sono considerati una delle nazioni più economiche del mondo, quindi non sorprende che questo tipo di progetto sia nato dalla startup polacca kodyrabatowe.pl. In che modo questo portale può essere utile a un normale utente Internet in Russia?
I moderni telefoni Android sono più che telefoni. Ti abitui a scrivere programmi installati, alla cronologia delle tue chiamate e messaggi di testo, raccolte di foto e altro ancora. Ma il tempo passa e il dispositivo che fa per te inizia completamente a rallentare, presentare problemi o semplicemente perde il suo aspetto presentabile a causa di scheggiature sulla custodia o graffi sullo schermo. Sorge la domanda di scegliere un nuovo telefono e cambiare telefono Android... E se ora ignoriamo la questione della scelta, allora "spostarci" a nuovo telefono rimane un problema serio: non vuoi assolutamente iniziare tutti i dati da zero. Questo è ciò di cui parleremo oggi.
La maggior parte dei lettori di questo blog, molto probabilmente, non ha mai incontrato sistemi di controllo della versione e non ne incontrerà nessuno nel prossimo futuro. È un peccato. Questa invenzione estremamente conveniente è molto utilizzata dai programmatori, ma, a mio avviso, potrebbe essere molto utile per chi lavora attivamente con i testi. Ma, probabilmente, ora non esiste un unico sistema di controllo della versione che sarebbe facile iniziare a utilizzare per "ufficio" ( Microsoft Office) opera. Tuttavia, penso che il materiale presentato nell'articolo possa essere interessante per tutti i lettori.
Se hai pensato a come guardare i film in rete dalla tua TV e andare online, questo articolo fa per te. No, so che alcuni televisori hanno già la funzionalità Smart TV, ma non l'ho mai vista funzionare correttamente. Apparentemente, quindi, di recente la società Google ha dimostrato un dispositivo assolutamente sbalorditivo, che è diventato immediatamente una sensazione. Stiamo parlando dello streamer multimediale Chromecast (Chromecast), una versione più avanzata ed economica del disastroso lettore Nexus Q dello scorso anno.
Il dongle Chromecast, di dimensioni non superiori a 2 pollici, si collega alla porta TV HDMI e ti consente di guardare i contenuti web in streaming. Per controllare lo streamer è possibile utilizzare qualsiasi dispositivo (tablet, PC, smartphone) basato sulla piattaforma operativa iOS, Windows, Android o Mac OS.
Questo articolo è dedicato al dispositivo della memoria del sistema Android, ai problemi che possono sorgere a causa della sua mancanza e a come risolverli. Non molto tempo fa, io stesso mi sono trovato di fronte al fatto che il mio telefono Android ha iniziato a inviare regolarmente messaggi sulla memoria insufficiente durante il tentativo di installare un'applicazione. Il che è stato molto strano per me, visto che, secondo la descrizione sul mercato, avrebbero dovuto essere circa 16 GB, e ho anche aumentato questo volume con una scheda di memoria aggiuntiva. Tuttavia, c'era un problema e ho dovuto armeggiare molto prima di trovarlo la decisione giusta che non richiede l'accesso root o un ripristino completo di fabbrica del telefono.
XML è sempre più utilizzato per archiviare informazioni e scambiarle tra applicazioni e siti Web. Molte applicazioni utilizzano questo linguaggio come linguaggio di base per l'archiviazione dei dati, mentre altri lo utilizzano per l'esportazione e l'importazione di dati XML. Quindi è tempo che gli sviluppatori inizino a pensare a come i dati XML possono essere utilizzati nelle proprie applicazioni.
In questo articolo, esamineremo il DOM (Document Object Model) XML e l'implementazione di Microsoft del DOM XML.
Il DOM XML è un modello a oggetti che fornisce a uno sviluppatore oggetti per il caricamento e l'elaborazione di file XML. Il modello a oggetti è costituito dai seguenti oggetti principali: XMLDOMDocument, XMLDOMNodeList, XMLDOMNode, XMLDOMNamedNodeMap e XMLDOMParseError. Ciascuno di questi oggetti (eccetto XMLDOMParseError) contiene proprietà e metodi che consentono di ottenere informazioni sull'oggetto, manipolare i valori e la struttura dell'oggetto e navigare nella struttura di un documento XML.
Diamo un'occhiata ai principali oggetti XML DOM e mostriamo alcuni esempi del loro utilizzo in Borland Delphi.
Utilizzo di XML DOM in Borland Delphi
Per utilizzare Microsoft XML DOM nelle applicazioni Delphi, è necessario connettere la libreria dei tipi appropriata al progetto. Per fare ciò, eseguiamo il comando Progetto | Importa libreria dei tipi e nella finestra di dialogo Importa libreria dei tipi, selezionare la libreria Microsoft XML versione 2.0 (versione 2.0), che di solito si trova nel file Windows \ System \ MSXML.DLL
Dopo aver fatto clic sul pulsante Crea unità, verrà creato il modulo di interfaccia MSXML_TLB, che ci consentirà di utilizzare gli oggetti DOM XML: DOMDocument, XMLDocument, XMLHTTPRequest e molti altri, implementati nella libreria MSXML.DLL. Il riferimento al modulo MSXML_TLB deve essere nell'elenco degli usi.
Dispositivo DOM XML
Il Document Object Model rappresenta un documento XML in una struttura ad albero di rami. Le API XML DOM consentono alle applicazioni di navigare nell'albero del documento e manipolarne i rami. Ogni ramo può avere un tipo specifico (DOMNodeType), in base al quale vengono determinati i rami padre e figlio. La maggior parte dei documenti XML contiene rami di tipo elemento, attributo e testo. Gli attributi sono un tipo speciale di ramo e non sono rami figlio. Per manipolare gli attributi vengono utilizzati metodi speciali forniti dagli oggetti XML DOM.
Oltre all'implementazione delle interfacce consigliate dal World Wide Web Consortium (W3C), Microsoft XML DOM contiene metodi che supportano XSL, modelli XSL, spazi dei nomi e tipi di dati. Ad esempio, il metodo SelectNodes consente di utilizzare la sintassi del modello XSL per trovare rami in un contesto specifico e il metodo TransformNode supporta l'utilizzo di XSL per eseguire trasformazioni.
Documento XML di prova
Come esempio di documento XML, prendiamo una directory di CD-ROM musicali, che ha la seguente struttura:
Ora siamo pronti per iniziare a guardare il modello a oggetti XML DOM, iniziando con l'oggetto XMLDOMDocument.
Documento XML - Oggetto XMLDOMDocument
Il lavoro con un documento XML inizia con il suo caricamento. Per fare ciò, utilizziamo il metodo Load, che ha un solo parametro che specifica l'URL del documento caricato. Quando si caricano file da un disco locale, viene specificato solo il nome completo del file (in questo caso il file: /// protocol può essere omesso). Se il documento XML è archiviato come stringa, utilizzare il metodo LoadXML per caricare il documento.
La proprietà Async viene utilizzata per controllare la modalità di caricamento del documento (sincrono o asincrono). Per impostazione predefinita, questa proprietà è impostata su True, a indicare che il documento viene caricato in modo asincrono e il controllo viene restituito all'applicazione prima che il documento sia completamente caricato. In caso contrario, il documento viene caricato in modo sincrono e quindi è necessario controllare il valore della proprietà ReadyState per scoprire se il documento è stato caricato o meno. È inoltre possibile creare un gestore per l'evento OnReadyStateChange che assumerà il controllo quando cambia il valore della proprietà ReadyState.
Di seguito viene mostrato come caricare un documento XML utilizzando il metodo Load:
Utilizza ... MSXML_TLB ... procedura TForm1.Button1Click (Mittente: TObject); var XMLDoc: IXMLDOMDocument; iniziare XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = False; XMLDoc.Load ('C: \ DATA \ DATA.xml'); // // Qui è dove il codice che manipola // il documento XML ei suoi rami // XMLDoc: = Nil; fine;
Dopo che il documento è stato caricato, possiamo accedere alle sue proprietà. Quindi, la proprietà NodeName conterrà il valore #document, la proprietà NodeTypeString conterrà il valore del documento e la proprietà URL conterrà il file: /// C: /DATA/DATA.xml value.
Gestione degli errori
Di particolare interesse sono le proprietà relative all'elaborazione del documento al momento del caricamento. Ad esempio, la proprietà ParseError restituisce un oggetto XMLDOMParseError contenente informazioni su un errore che si è verificato durante l'elaborazione del documento.
Per scrivere un gestore di errori, puoi aggiungere il seguente codice:
Var XMLError: IXMLDOMParseError; ... XMLDoc.Load ('C: \ DATA \ DATA.xml'); XMLError: = XMLDoc.ParseError; Se XMLError.ErrorCode<>0 Allora // // Qui gestiamo l'errore // Else Memo1.Lines.Add (XMLDoc.XML); ... XMLDoc: = Nessuno;
Per scoprire quali informazioni vengono restituite in caso di errore, modificare la seguente voce di directory:
rimozione dell'elemento di chiusura
Ora scriviamo il codice che restituisce i valori delle proprietà dell'oggetto XMLDOMParseError:
XMLError: = XMLDoc.ParseError; Se XMLError.ErrorCode<>0 Quindi con XMLError, Memo1.Lines inizia Add ("File:" + URL); Aggiungi ("Codice:" + IntToStr (ErrorCode)); Aggiungi ("Errore:" + Motivo); Aggiungi ("Testo:" + SrcText); Aggiungi ("Linea:" + IntToStr (Linea)); Aggiungi ("Posizione:" + IntToStr (LinePos)); end Else Memo1.Lines.Add (XMLDoc.XML); Fine;
ed eseguire la nostra applicazione. Di conseguenza, otteniamo le seguenti informazioni sull'errore.
Come puoi vedere dall'esempio sopra, le informazioni restituite dall'oggetto XMLDOMParseError sono abbastanza per localizzare l'errore e capire la causa del suo verificarsi.
Ora ripristineremo l'elemento di chiusura
Accesso all'albero dei documenti
Per accedere all'albero del documento, puoi ottenere l'elemento radice e quindi scorrere i suoi rami figlio o trovare un ramo specifico. Nel primo caso, otteniamo l'elemento radice tramite la proprietà DocumentElement, che restituisce un oggetto di tipo XMLDOMNode. Ecco come utilizzare la proprietà DocumentElement per ottenere il contenuto di ogni elemento figlio:
Nodo Var: IXMLDOMNode; Radice: IXMLDOMElement; I: numero intero; ... Root: = XMLDoc.DocumentElement; Per I: = 0 a Root.ChildNodes.Length-1 do Begin Node: = Root.ChildNodes.Item [I]; Memo1.Linee.Add (Nodo.Testo); Fine;
Per il nostro documento XML, otteniamo il seguente testo.
Se siamo interessati a un ramo specifico o a un ramo sotto il primo ramo figlio, possiamo utilizzare il metodo NodeFromID o il metodo GetElementByTagName dell'oggetto XMLDOMDocument.
Il metodo NodeFromID richiede un identificatore univoco come definito nello schema XML o nella definizione del tipo di documento (DTD) e restituisce un ramo con tale identificatore.
Il metodo GetElementByTagName richiede una stringa con un elemento specifico (tag) e restituisce tutti i rami con questo elemento. Ecco come utilizzare questo metodo per trovare tutti gli artisti nella nostra directory del CD-ROM:
Nodi: IXMLDOMNodeList; Nodo: IXMLDOMNode; ... Nodi: = XMLDoc.GetElementsByTagName ('ARTISTA'); Per I: = 0 a Nodes.Length-1 do Begin Node: = Nodes.Item [I]; Memo1.Linee.Add (Nodo.Testo); Fine;
Per il nostro documento XML, otterremo il seguente testo
Si noti che il metodo SelectNodes dell'oggetto XMLDOMNode fornisce un modo più flessibile per accedere ai rami del documento. Ma più su quello sotto.
Ramo documento - Oggetto XMLDOMNode
L'oggetto XMLDOMNode rappresenta un ramo del documento. Abbiamo già incontrato questo oggetto quando abbiamo ottenuto l'elemento radice del documento:
Root: = XMLDoc.DocumentElement;
Per ottenere informazioni su un ramo di un documento XML, è possibile utilizzare le proprietà dell'oggetto XMLDOMNode (Tabella 1).
Per accedere ai dati memorizzati in un ramo, è comune utilizzare la proprietà NodeValue (disponibile per attributi, rami di testo, commenti, istruzioni di elaborazione e sezioni CDATA), o la proprietà Text, che restituisce il contenuto testuale del ramo, o la proprietà NodeTypedValue. Quest'ultimo, tuttavia, può essere utilizzato solo per rami con elementi digitati.
Navigazione nell'albero del documento
L'oggetto XMLDOMNode fornisce molti modi per navigare nell'albero del documento. Ad esempio, per accedere al ramo padre, utilizzare la proprietà ParentNode (tipo XMLDOMNode), accedere ai rami figlio tramite le proprietà ChildNodes (tipo XMLDOMNodeList), FirstChild e LastChild (tipo XMLDOMNode), ecc. La proprietà OwnerDocument restituisce un oggetto XMLDOMDocument che identifica il documento XML stesso. Le proprietà sopra elencate semplificano la navigazione nell'albero del documento.
Ora esaminiamo tutti i rami del documento XML:
Root: = XMLDoc.DocumentElement; Per I: = 0 a Root.ChildNodes.Length-1 do Begin Node: = Root.ChildNodes.Item [I]; If Node.HasChildNodes Then GetChilds (Node, 0); Fine;
Come notato sopra, il SelectNodes dell'oggetto XMLDOMNode fornisce un modo più flessibile per accedere ai rami del documento. Inoltre, esiste un metodo SelectSingleNode che restituisce solo il primo ramo del documento. Entrambi questi metodi consentono di definire modelli XSL per le ricerche di filiale.
Diamo un'occhiata al processo di utilizzo del metodo SelectNodes per recuperare tutti i rami che hanno un ramo CD e un ramo secondario PRICE:
Root: = XMLDoc.DocumentElement; Nodi: = Root.SelectNodes ("CD / PREZZO");
Tutti i sotto-rami PRICE del ramo CD verranno inseriti nella raccolta Nodes. Torneremo a discutere dei modelli XSL un po' più tardi.
Manipolare i rami figli
Per manipolare i rami figli, possiamo usare i metodi dell'oggetto XMLDOMNode (Tabella 2).
Per eliminare completamente il record relativo al primo disco, è necessario eseguire il seguente codice:
Var XMLDoc: IXMLDOMDocument; Radice: IXMLDOMNode; Nodo: IXMLDOMNode; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = False; XMLDoc.Load ('C: \ DATA \ DATA.xml'); // Recupera l'elemento radice Root: = XMLDoc.DocumentElement; Nodo: = Radice; // Rimuove il primo ramo figlio Node.RemoveChild (Node.FirstChild);
Nota che in questo esempio stiamo eliminando il primo ramo figlio. Di seguito è mostrato come rimuovere il primo elemento del primo ramo figlio:
Var XMLDoc: IXMLDOMDocument; Radice: IXMLDOMNode; Nodo: IXMLDOMNode; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = False; XMLDoc.Load ('C: \ DATA \ DATA.xml'); // Recupera l'elemento radice Root: = XMLDoc.DocumentElement; // e il primo ramo figlio Node: = Root.FirstChild; // Rimuove il primo ramo figlio Node.RemoveChild (Node.FirstChild);
Nell'esempio sopra, abbiamo eliminato non il primo ramo
Ora aggiungiamo un nuovo ramo. Di seguito è riportato il codice che mostra come aggiungere una nuova voce CD-ROM musicale:
Var NewNode: IXMLDOMNode; Figlio: IXMLDOMNode; ... // Crea un nuovo ramo -
Il codice sopra mostra la seguente sequenza di passaggi per aggiungere un nuovo ramo:
- Creazione di un nuovo ramo utilizzando il metodo CreateNode:
- creare un elemento usando il metodo CreateNode;
- aggiungere un elemento a un ramo usando il metodo AppendChild;
- impostare il valore di un elemento tramite la proprietà Text;
- … Ripetere per tutti gli elementi.
- Aggiunta di un nuovo ramo al documento utilizzando il metodo AppendChild.
Ricordiamo che il metodo AppendChild aggiunge un ramo alla fine dell'albero. Per aggiungere un ramo in un punto specifico dell'albero, è necessario utilizzare il metodo InsertBefore.
Set di rami - oggetto XMLDOMNodeList
L'oggetto XMLNodeList contiene un elenco di rami, che possono essere compilati utilizzando i metodi SelectNodes o GetElementsByTagName e ottenuti anche dalla proprietà ChildNodes.
Abbiamo già discusso l'uso di questo oggetto nell'esempio fornito nella sezione "Navigazione nell'albero del documento". Qui forniremo alcuni commenti teorici.
Il numero di rami nell'elenco può essere ottenuto come valore della proprietà Length. I rami sono indicizzati da 0 a Lunghezza-1 e ogni singolo ramo è accessibile tramite l'elemento indicizzato corrispondente nell'array Item.
La navigazione nell'elenco dei rami può essere eseguita anche utilizzando il metodo NextNode, che restituisce il ramo successivo nell'elenco, o Nil se il ramo corrente è l'ultimo. Per tornare all'inizio dell'elenco, chiama il metodo Reset.
Crea e salva documenti
Quindi, abbiamo spiegato come aggiungere rami ed elementi a documenti XML esistenti. Ora creiamo al volo un documento XML. Prima di tutto, ricorda che un documento può essere caricato non solo da un URL, ma anche da una stringa normale. Ecco come creare un elemento radice, che può quindi essere utilizzato per costruire dinamicamente il resto degli elementi (di cui abbiamo già parlato nella sezione Manipolazione dei rami figlio):
Var XMLDoc: IXMLDOMDocument; Radice: IXMLDOMNode; Nodo: IXMLDOMNode; S: Stringa Larga; ... S: = '
Dopo aver creato il documento XML, salvalo in un file utilizzando il metodo Save. Ad esempio:
XMLDoc.Save ('C: \ DATA \ NEWCD.XML');
Oltre al salvataggio in un file, il metodo Save consente di salvare un documento XML in un nuovo oggetto XMLDOMDocument. In questo caso, il documento viene elaborato completamente e, di conseguenza, ne vengono verificate la struttura e la sintassi. Ecco come salvare un documento in un altro oggetto:
Procedura TForm1.Button2Click (Mittente: TObject); var XMLDoc2: IXMLDOMDocument; iniziare XMLDoc2: = CoDOMDocument.Create; XMLDoc.Salva (XMLDoc2); Memo2.Lines.Add (XMLDoc2.XML); ... XMLDoc2: = Nessuno; fine;
In conclusione, il metodo Save consente anche di salvare il documento XML in altri oggetti COM che supportano le interfacce IStream, IPersistStream o IPersistStreamInit.
Utilizzo dei modelli XSL
Quando abbiamo discusso del metodo SelectNodes dell'oggetto XMLDOMNode, abbiamo detto che fornisce un modo più flessibile per accedere ai rami del documento. La flessibilità è che puoi specificare un modello XSL come criterio per la selezione dei rami. Tali modelli forniscono un potente meccanismo per trovare informazioni nei documenti XML. Ad esempio, per ottenere un elenco di tutti i titoli di CD-ROM musicali nella nostra directory, è possibile eseguire la seguente query:
Per sapere quali dischi di artisti escono negli USA, la richiesta si forma come segue:
Nodi: = Root.SelectNodes ("CD / ARTISTA");
Ecco come trovare la prima unità in una directory:
Nodi: = Root.SelectNodes ("CD / TITLE");
E ultimo:
Nodi: = Root.SelectNodes ("CD / TITLE");
Per trovare i dischi di Bob Dylan, puoi eseguire la seguente query:
Nodi: = Root.SelectNodes (‘CD [$ any $ ARTIST =” Bob Dylan ”] / TITLE’);
e per ottenere un elenco di dischi realizzati dopo il 1985, eseguiamo la seguente query:
Nodi: = Root.SelectNodes ("CD / TITLE");
Una discussione più dettagliata della sintassi XSL richiede una pubblicazione separata. Per incuriosire i lettori e incoraggiare ulteriori ricerche, darò solo un piccolo esempio del possibile utilizzo di XSL. Diciamo che dobbiamo convertire il nostro catalogo in una normale tabella HTML. Utilizzando i metodi tradizionali, dobbiamo iterare su tutti i rami dell'albero e per ogni elemento ricevuto formare i tag corrispondenti
Usando XSL, creiamo semplicemente un modello (o foglio di stile) che specifica cosa trasformare e come. Quindi sovrapponiamo questo modello al nostro catalogo - e il gioco è fatto: abbiamo il testo di un modello XSL che trasforma il catalogo in una tabella (Listato 2).
Il codice per sovrapporre un modello XSL sulla nostra directory è simile a questo:
Procedura TForm1.Button2Click (Mittente: TObject); var XSLDoc: IXMLDOMDocument; begin XSLDoc: = CoDOMDocument.Create; XSLDoc.Load ('C: \ DATA \ DATA.xsl'); Memo2.Text: = XMLDoc.TransformNode (XSLDoc); XSLDoc: = Nessuno; fine;
Concludendo la nostra discussione su XSL, va detto che attualmente questo linguaggio viene utilizzato attivamente per la trasformazione tra vari documenti XML, nonché per la formattazione dei documenti.
Conclusione
Per ovvie ragioni, è impossibile coprire tutti gli oggetti DOM XML di Microsoft e fornire esempi del loro utilizzo in un articolo. Qui abbiamo appena toccato i problemi di base dell'utilizzo di XML DOM nelle applicazioni. Tavolo 3 mostra tutti gli oggetti implementati nel DOM XML di Microsoft.
ComputerPress 12" 2000
Per molti programmatori Delphi, il salvataggio delle impostazioni è associato all'utilizzo INI file nei loro programmi. L'uso di questo metodo, in progetti più o meno seri, dovrebbe essere evitato, poiché limita la flessibilità, che impedisce un'ulteriore espansione del programma. Va detto che questo approccio è piuttosto popolare grazie alla sua facilità d'uso e alla presenza di strumenti integrati nell'ambiente di sviluppo.
Tuttavia, strutturato XML File. Il loro vantaggio è che il numero di parametri potrebbe non essere fisso. Per capirlo meglio, considera un esempio specifico.
Nel programma USearch, quando si fa clic su una voce, viene visualizzato un menu di scelta rapida in cui viene visualizzato un elenco di elementi. Questi elementi sono comandi, che a loro volta vengono caricati dal file delle impostazioni. Nel caso in cui le impostazioni siano state memorizzate in INI file, quindi il programma potrebbe salvare e caricare un certo numero di comandi, ad esempio 10 o 50. Non appena sarà richiesto un valore maggiore, sarà necessario riscrivere il codice e ricompilarlo di conseguenza.
Applicare un approccio usando XML file, saremo in grado di caricare dinamicamente tutti i parametri della sezione. Inoltre, il file di configurazione diventerà più elegante, senza numerazione ridondante dei parametri. Tuttavia, gli strumenti standard per lavorare con XML Delphi ha molti svantaggi, quindi consiglio di usare la libreria standard MSXML... Di solito è incluso di default con i sistemi operativi della famiglia Windows.
Per connettere MSXML, dobbiamo generare un file di interfaccia con un elenco di tutte le funzioni importandolo dal server COM. Sono stati scritti molti articoli dettagliati su come importare l'interfaccia, ma ti consiglio di scaricare il file MSXML2_TLB.PAS pronto all'uso. Dopo che il file è stato scaricato, posizionalo accanto al tuo progetto o rilascialo nella cartella lib dell'ambiente Delphi. Pertanto, tutti i programmi creati potranno utilizzare il modulo MSXML, devi solo aggiungere la riga MSXML2_TLB a use.
Per chiarezza, si consideri il seguente esempio di utilizzo di questa libreria:
Procedura LoadData; var XMLDoc: DOMDocument; Radice: IXMLDOMElement; iniziare XMLDoc: = CoDOMDocument.Create; XMLDoc.Load ("settins.xml"); Root: = XMLDoc.DocumentElement; ShowMessage (Root.SelectSingleNode ("dimensione/larghezza"). Testo); Radice: = zero; XMLDoc: = zero; fine;
Innanzitutto, viene creata un'istanza della classe DOMDocument, quindi il contenuto del file settings.xml viene caricato in memoria. Poiché, secondo lo standard, qualsiasi XML il file deve contenere il tag radice (in questo caso config), quindi dobbiamo ottenerlo usando la funzione DocumentElement... Quindi il contenuto viene visualizzato tra i tag.
Qui viene applicato il metodo SelectSingleNode, che accetta una stringa come parametro
ORDINA LA SOLUZIONE DEL PROBLEMA SU DELPHI
Delphi è il secondo linguaggio di programmazione più importante che gli studenti vengono introdotti più spesso nel processo di apprendimento. Questo è l'inizio dell'apprendimento della programmazione orientata agli oggetti. Da studente, sono giunto alla conclusione che non esiste un metodo più semplice per imparare una lingua che scriverci una calcolatrice. Anche se implementi una funzione rudimentale per l'aggiunta di due numeri, farà molta luce su di essa.
CodeGaear, Delphi 7, Lazarus sono diversi compilatori, programmi che trasferiranno il codice che scrivi alla macchina, convertendolo in uno e uno. Questi sono tutti programmi per creare programmi, non linguaggi di programmazione separati. Questi compilatori utilizzano il linguaggio di programmazione Object Pascal, che è la base del linguaggio Delphi, che è simile nella sintassi al normale Pascal, ma differisce in modo significativo dal punto di vista funzionale.
Qual è la sintassi di un linguaggio di programmazione?
Questo è il formato per scrivere vari operatori. Ad esempio, un ciclo Pascal "for" ha il seguente formato: "for n: = 1 to k do" e così via.
Nel linguaggio di programmazione C++, lo stesso ciclo è scritto in modo leggermente diverso: for (n = 1; n Scriviamo una calcolatrice
Questo ti darà una comprensione di come gli oggetti interagiscono con il codice del programma, cosa sono le "variabili" e come funzionano le funzioni matematiche. Qualsiasi programmazione sarà comunque un calcolo. Un gioco è anche un programma che calcola costantemente qualcosa, lavora con numeri e funzioni numeriche. La programmazione è inseparabile dalla matematica.
Usiamo l'ambiente di sviluppo Lazarus per scrivere. La sua funzionalità non è ricca come, ad esempio, CodeGear, ma è disponibile gratuitamente ed è destinata alla formazione.
Aprendo l'ambiente di sviluppo, vediamo il form e la cassetta degli attrezzi. Ecco il modulo.
Ecco la cassetta degli attrezzi.
La prima cosa che faremo è aggiungere i tre elementi di cui abbiamo bisogno per implementare la funzione per l'aggiunta di due numeri. Abbiamo bisogno di: "Tedit" nella quantità di tre pezzi e "TButton". Nell'immagine sottostante sono mostrati sul pannello con le frecce. Facciamo clic su di essi una volta, quindi una volta sul modulo e vengono visualizzati su di esso.
Questi sono campi di testo per l'input e un normale pulsante. Ti imbatti in questi elementi utilizzando quasi tutti i programmi Windows. Guarda.
Ora ripuliamo queste etichette. Fare clic sulla scheda "Visualizza". E fai clic sulla voce "Ispettore oggetti. Apparirà una finestra come questa.
Facciamo clic una volta sul nostro elemento "Pulsante" nel modulo e cambiamo il valore "Didascalia" nella finestra di ispezione con qualsiasi altro. Ad esempio, la parola "Ok". Premiamo Invio. Vediamo sul modulo come l'elemento ha cambiato nome.
Faremo lo stesso con gli Edit, solo che non li rinomineremo, ma li faremo senza alcun contenuto. Selezionali a turno e deseleziona il valore Testo nell'inspector. Non dimenticare di premere Invio.
Di conseguenza, il nostro modulo è simile a questo.
Ora, affinché la nostra calcolatrice funzioni, è necessario scrivere il codice del programma necessario per la procedura del nostro pulsante. Fare clic due volte sull'elemento Button e aprire l'editor di origine.
Vedere? Procedura Button1Click. Questa è la procedura responsabile di ciò che accade quando clicchiamo una volta sul pulsante. E dovrebbe succedere quanto segue: il programma deve visualizzare la somma dei numeri inseriti nei primi due campi nel terzo Edit. Scriviamo il codice.
Dobbiamo scrivere 5 righe di codice così semplici. Commenti e spiegazioni possono essere visti nella foto sopra. Successivamente, premiamo questo pulsante.
Il nostro progetto sarà compilato. Verrà compilato in un programma. Inseriamo i numeri nei primi due campi, clicchiamo sul pulsante e otteniamo il valore della somma.
Conclusione
Puoi fare clic sul pulsante "File", quindi "Salva tutto", selezionare una cartella da salvare e avrai un programma completo che può essere avviato dal desktop. Ora prova a capire da solo cosa devi riscrivere in questo codice in modo che il programma divida due numeri e non aggiunga. Suggerimento: è necessario modificare il tipo di dati. Il video qui sotto mostra un esempio simile, ma nell'ambiente Delphi 7, non Lazarus.
Recentemente, molta attenzione è stata dedicata alla costruzione di sistemi di e-business, o come vengono anche chiamati - B2B (business to business). Considerate le raccomandazioni sulla costruzione di sistemi di scambio streaming dell'organismo di coordinamento delle tecnologie Internet - WWW Consortium: l'accento è posto sulle tecnologie XML e sulla costruzione di sistemi per lo scambio di documenti XML.
Il vantaggio dell'utilizzo di XML nell'e-business è l'elevata efficienza dei sistemi B2B a costi contenuti per la sua creazione grazie a una presentazione chiara e visiva di informazioni strutturate, la capacità di utilizzare i moderni protocolli di rete e creare sistemi aziendali in tempo reale.
L'indipendenza della presentazione delle informazioni sotto forma di documenti XML consente a diverse aziende coinvolte nell'e-business di produrre software indipendentemente l'una dall'altra.
In tutti i sistemi, lo scambio, di regola, è costruito secondo lo stesso schema, utilizzando le richieste HTTP. SSL viene utilizzato come protocollo di sicurezza delle informazioni (ma questo è un argomento separato).
Una delle possibili opzioni per l'elaborazione dei messaggi XML consiste nel creare applicazioni BIN/CGI (ISAPI) o componenti COM (server) che generano o elaborano documenti XML.
Da un lato l'applicazione funge da client, che emette una richiesta HTTP in modalità POST, dall'altro è presente un server WEB a fianco del quale viene elaborata la richiesta e viene emessa una risposta. Lo scambio di informazioni utilizza documenti XML.
Una delle opzioni di implementazione più efficienti consiste nell'utilizzare un parser XML esistente che supporti il modello DOM. Tale parser è un pacchetto di distribuzione di Win'98 o parte integrante di IE 4.7 e versioni successive (per Win'95) e rappresenta un server COM situato nella libreria msxml.dll.
Component Object Model (COM) - Rappresenta dati e metodi incapsulati in un'unica entità e un modo per accedervi attraverso un sistema di interfacce. Usando gli strumenti Delphi, è abbastanza facile accedere alle classi di un oggetto COM (più classi possono essere incluse in un server COM). Si accede agli oggetti inizializzando un'istanza della classe tramite il sistema di interfaccia. La descrizione delle interfacce viene eseguita dal linguaggio di definizione dell'interfaccia (IDL), che può essere eseguito automaticamente tramite l'ambiente.
Gli strumenti Delphi sono usati per importare da un server COM msxml.dll, vengono costruiti i file per la descrizione dell'interfaccia IDL e il file per la descrizione binaria dei tipi di libreria - TLB. Questa operazione viene eseguita tramite il menu di sistema: Progetto | Importazione della libreria dei tipi:(foto 1). Successivamente, viene visualizzata una finestra di dialogo (Figura 2), in cui è necessario selezionare un oggetto COM (nel nostro caso, l'oggetto è registrato con il nome "Microsoft.XMLDom (versione 2.0)") e creare un file TLB (pulsante Crea unità). Utilizzando il file TLB, il framework genera un file di descrizione del server COM "Pascal" - MSXML_TLB.pas
Il file MSXML_TLB.pas descrive tutte le interfacce, le costanti e le coclassi del server COM.
Per accedere agli oggetti di un elemento COM, è necessario nella direttiva USI aggiungere il nome del file di descrizione della libreria (MSXML_TLB.pas). Di seguito è riportato un semplice programma che utilizza il parser DOM standard msxml.dll, che carica un documento XML e lo visualizza in un elemento del campo di testo Memo1.
usa Windows, Messaggi, SysUtils, Classi, Grafica, Controlli, Moduli, Finestre di dialogo, OleServer, MSXML_TLB, StdCtrls; genere TForm1 = classe(TForm) Button1: TButton; Memo1: TMemo; procedura Button1Click (mittente: TObject); fine; varia Modulo1: TForm1; implementazione($ R * .DFM) Procedura TForm1.Button1Click (mittente: oggetto); // dichiarazione della soclass dell'oggetto DOMDocument; varia coDoc: CoDOMDocument; // classe coerente con l'interfaccia IDOMDocument; varia Doc: IXMLDOMDocument; inizio // crea un'istanza dell'oggetto DOMDocument; Doc: = coDoc.Crea; // chiama il metodo Load di un'istanza dell'oggetto DOMDocument; Doc.load ("data.xml"); // accedere alla proprietà xml dell'istanza DOMDocument; Memo1.Testo: = Doc.xml; fine; fine.DOM Concept - Document Object Model
Ogni documento XML è rappresentato come un insieme di più oggetti (classi), con l'aiuto dei quali è possibile accedere ai singoli elementi (campi oggetto). DOM - l'interfaccia descrive l'accesso sia a semplici oggetti di tipo DOMString o CharacterData, sia a parti o singoli elementi di un documento XML: DOMFragmentElement, DOMNode, DOMElement.
Di seguito sono riportate le proprietà ei metodi più importanti degli oggetti XMLDOMDocument, XMLDOMNode, XMLDOMNodeList. Va notato che i metodi e le funzioni degli oggetti Document Object Model (DOM) presentati di seguito sono utilizzati dal parser Microsoft XML msxml.dll e sono in qualche modo più ampi del modello DOM approvato dal W3C Consortium.
Una descrizione più completa dell'interfaccia dell'oggetto DOM può essere trovata su
XMLDOMDocument oggetto | |
Rappresenta il livello più alto della gerarchia degli oggetti e contiene metodi per lavorare con un documento: caricarlo, analizzarlo, creare elementi, attributi, commenti, ecc. ... | |
Proprietà | |
Asincrono | Proprietà che identifica la modalità di elaborazione corrente |
ParseError | Restituisce un riferimento all'oggetto di gestione degli errori XMLDOMParseError |
Abilita - disabilita la verifica del documento. | |
URL | Restituisce l'URL del documento |
documentElement | Contiene un riferimento all'elemento radice del documento come oggetto XMLDOMElement. |
metodi | |
caricare (URL) loadXML (xmlString) |
Carica un documento XML, |
salva (objTarget) | Salva il documento XML su file |
abortire | Interruzione del processo di caricamento ed elaborazione del documento. |
createAttribute (nome) | Crea un nuovo attributo con il nome specificato per l'elemento corrente. |
createNode (Tipo, nome, nomeSpaceURI) | Crea un nodo del tipo e del nome specificati |
createElement (tagName) | Crea un elemento del documento con il nome specificato. |
createTextNode (dati) | Crea testo all'interno di un documento |
getElementsByTagName (nome tag) | Restituisce un riferimento alla raccolta di elementi del documento con il nome dato |
nodeFromID (idString) | Trova un elemento per ID |
Oggetto XMLDOMNode | |
Un oggetto XMLDOMNode che implementa l'interfaccia DOM sottostante Nodo, è destinato alla manipolazione con un nodo separato dell'albero del documento. Le sue proprietà e i suoi metodi consentono di ottenere e modificare informazioni complete sul nodo corrente: tipo, nome, nome completo, contenuto, elenco di elementi figlio, ecc. | |
Proprietà | |
NomeNodo, NomeBase | Restituisce il nome del nodo corrente. |
prefisso | Restituisce il prefisso dello spazio dei nomi. |
tipo di dati | Specifica il tipo di contenuto del nodo corrente |
nodeType, nodeTypeString | Restituisce il tipo del nodo corrente: |
attributi | Ottiene un elenco degli attributi del nodo corrente come raccolta XMLDOMNamedNodeMap. |
testo | Restituisce il contenuto del sottoalbero corrente come testo |
xml | Restituisce una rappresentazione XML del sottoalbero corrente. |
nodeValue | Restituisce il contenuto del nodo corrente. |
childNodes | Restituisce un elenco di elementi figlio come XMLDOMNodeList. |
primo figlio, ultimo figlio | Restituisce il primo/ultimo figlio |
precedenteSibling, nextSibling | Restituisce il fratello precedente/successivo. |
parentNode | Contiene un collegamento all'elemento padre. |
proprietarioDocumento | Restituisce un puntatore al documento contenente il nodo corrente. |
metodi | |
appendChild (newChild) | Aggiunge un nuovo figlio al nodo corrente. |
insertBefore (newChild, refChild) | Inserisce un nodo figlio, posizionandolo nel sottoalbero corrente a sinistra del nodo specificato da refChild. |
cloneNode (profondo) | Crea una copia dell'elemento corrente. |
getAttribute(nome) getAttributeNode(nome) setAttribute (nome, valore) setAttributeNode (XMLDOMAttribute) |
Accesso agli attributi (creazione, lettura, scrittura) dell'oggetto. Name è il nome dell'attributo, value è il suo valore. Restituisce il valore di un oggetto XMLDOMAttribute. |
sostituisciChild (newChild, oldChild) removeChild (oldChild) | Sostituzione dell'oggetto oldChild dell'elenco corrente di oggetti figlio con newChild. Eliminazione oggetto oldChild |
selectNodes (patternString) selectSingleNode (patternString) | Restituisce un oggetto XMLDOMNodeList selezionato dal modello di ricerca o dal primo nodo |
transformNode (foglio di stile) transformNodeToObject (foglio di stile, outputObject) |
Assegna un foglio di stile al sottoalbero del nodo corrente e restituisce una stringa che è il risultato dell'elaborazione. Il parametro è un riferimento all'oggetto DOMDocument che contiene le istruzioni XSL. |
Utilizzo di XML nel mondo degli affari.
Per un'immagine più chiara, è necessaria una spiegazione e perché tutto ciò è necessario per capire come funziona:
Quando si costruisce un sistema ERP B2B o aziendale, quando si organizza lo scambio di informazioni di documenti XML tra aziende o filiali del pr-I, viene utilizzato un sistema di trasferimento delle informazioni efficientemente collaudato basato su server WEB esistenti su protocolli HTTP.
Da un lato l'applicazione funge da client, che emette una richiesta HTTP in modalità POST, dall'altro è presente un server WEB, a lato del quale viene elaborata la richiesta e viene emessa una risposta. I documenti XML vengono utilizzati come scambio.
Ad esempio, in un semplice ERP aziendale, un programma di contabilità (ACS Contabilità), è necessario generare una richiesta di fattura e inviarla ad una filiale che dispone di un magazzino (ACS Magazzino). AWP Una dichiarazione di problema simile durante la creazione di un sistema B2B, quando l'impresa A richiede la disponibilità dei prodotti (effettua un ordine per l'acquisto) dal fornitore B.
L'impresa A e il suo programma fungono da client. Il magazzino è servito dal fornitore B, che dispone di un complesso di magazzini con un database su un server SQL. Lo scambio avviene tramite il server WEB aziendale del Fornitore V.
Di seguito è riportato il seguente algoritmo di scambio tipico:
Figura 3.
- Impresa A iniziati processo A(ordine prodotto), che funge da client WEB.
- Processo A genera un documento XML (ad esempio, una richiesta di fattura) e lo trasmette come richiesta http POST al server WEB del Provider B. L'identificatore di risorsa dell'applicazione di elaborazione viene utilizzato come URI. L'URI può essere lo stesso per tutti i tipi di documenti o individuale per ogni tipo. Tutto dipende dalla struttura del server B2B (WEB).
- Il server WEB analizza la richiesta e genera un server Processo B passando il corpo del documento XML come parametro.
Il processo B viene avviato dal server WEB e viene elaborato come pagina ASP, CGI (ISAPI) - applicazione o server JAVA (applicazione server) - Processo B- genera una richiesta al server del database SQL.
- Il server SQL esegue le operazioni necessarie nel database, genera una risposta e la restituisce Processo B.
- Secondo la risposta del server SQL Processo B genera un documento XML (risposta) e lo restituisce come risposta a una richiesta http all'applicazione client.
- Inoltre, a seconda della situazione sul lato client, viene formata una nuova richiesta http o la sessione termina.
Qualche parola sull'organizzazione del flusso di documenti.
La regola generale per lo sviluppo di un sistema per lo scambio di documenti XML è:
- in primo luogo- sviluppo di un diagramma di flusso dei documenti elettronici e loro struttura;
- secondo- sviluppo di tabelle di funzioni di processo (sottoprocessi), ad es. quale funzione rispetto a quale documento XML ogni processo implementerà.
Ogni documento XML, come un documento HTML, deve essere costituito da un'intestazione del messaggio (informazioni racchiuse da tag) e da un corpo del messaggio (per una richiesta, queste informazioni sono incorniciate da tag per rispondere a una richiesta). Affinché un documento XML sia ben formato, è necessario incorniciare le sue due parti componenti "Titolo" e "Richiesta" con tag, ad esempio. Il tipo di un documento tipico è presentato di seguito:
L'intestazione (Figura 4), a differenza di un documento HTML, deve contenere vari tipi di informazioni di servizio, comprese le informazioni sul tipo di documento trasmesso e il processo della sua elaborazione. Il corpo del documento entra nell'elaborazione delle informazioni, ad es. contenuto incorniciato da tag. Va notato che la struttura delle intestazioni dovrebbe essere la stessa per tutti i tipi di documenti.
Per il Processo avviato dal server, è preferibile (ma non necessario) costruire l'algoritmo di elaborazione come segue:
![](https://i1.wp.com/codenet.ru/np-includes/upload/2005/01/05/128666.jpg)
Figura 6.
Alcuni punti fondamentali nella creazione del lato client
Come già spiegato, quando si crea un documento XML, viene utilizzata la sua rappresentazione sotto forma di modello DOM. Di seguito è riportato un esempio di una porzione di testo Delphi di un programma di generazione di intestazioni xml di messaggi.
procedura TThread1.HeaderCreate (mittente: oggetto); varia // dichiarazione di classe, necessaria per creare coDoc: CoDomDocument; // Oggetto XMLDomDocument Doc: DomDocument; r: IXMLDOMElement; Nodo: IXMLDOMElement; // DOMText txt: IXMLDOMText; // DOMAttribute attr: IXMLDOMAttribute; inizio // crea un documento DOM Doc: = coDoc.Crea; Doc.Set_async (falso); // avvio iniziale del documento DOM Doc.LoadXML ("Va notato che la dichiarazione della variabile coDoc: CoDomDocument e Doc: DomDocument, nonché la sua creazione tramite il metodo Create (Doc: = coDoc.Create;) viene eseguita una volta. La dichiarazione della variabile si trova nella sezione che descrive le variabili globali e non nella procedura locale, come è stato dimostrato per chiarezza in questo esempio (ovvero una variabile globale del tipo DomDocument per un modulo di programma).
Il risultato del lavoro del programma precedente sarà l'intestazione creata, applicata al nostro esempio xml-document: mostrato in Figura 5.
![](https://i0.wp.com/codenet.ru/np-includes/upload/2005/01/05/128662.gif)
Figura 5.
Figura 6.
Il vantaggio principale del trasferimento di informazioni sotto forma di documenti XML è che è possibile formare un messaggio utilizzando strutture di tabelle indipendenti nel DBMS sia sul lato ricevente che su quello trasmittente. Utilizzando il nostro esempio, supponiamo che sia necessario trasferire le informazioni sulle fatture dell'impresa A, dal DBMS avente la struttura mostrata in Figura 6
Per generare un documento xml contenente una fattura, viene inizialmente creata una query SQL (query A) con informazioni sulla fattura stessa:
SELEZIONARE* DA Fattura_Generale DOVE InvoiceNum =: num SELEZIONARE Merci, Qulity, Prezzo, HZ_cod A PARTIRE DAL Merce DOVE InvoiceNum =: num //: num è un parametro che specifica il numero della fattura.Di seguito una parte del programma che genera il corpo del documento xml:
procedura TThread1.DataBodyCreate (mittente: oggetto); varia // dichiarazione della classe e dell'oggetto XMLDomDocument// coDoc: CoDomDocument; // deve essere globale per l'intero modulo.// Doc: DomDocument; // dichiara gli oggetti DOMElement r: IXMLDOMElement; // Elemento DOME; Nodo, Nodo2: IXMLDOMElement; Nodo3, Nodo4: IXMLDOMElement; // DOMText txt: IXMLDOMText; str: stringa; // Numero di fattura: numero intero;- variabile globale - // ha il valore 987654 // queryA, queryB: Corda;- una variabile globale, // ha un valore corrispondente alla richiesta // queryA - richiesta A con informazioni generali sulla fattura // queryB - richiesta B informazioni sulle merci descritte nella // fattura (vedi testo) inizio Query.Chiudi; // vedere il testo "richiesta A" Query.Text: = queryA; // esegue la richiesta Query.ExecSQL; Query.Apri; // ottiene l'indirizzo dell'elemento radice r: = Doc.Get_documentElement; Nodo2: = Doc.createElement ("Richiesta"); // crea DOMElement (tag) Nodo: = Doc.createElement ("Fattura"); // aggiungi un elemento alla radice r.appendChild (Nodo2); // aggiungi un elemento a Nodo2. appendChild (Nodo); // crea DOMElement (tag) Nodo3: = Doc.createElement ("Depurture"); // aggiungi un elemento a Nodo. appendChild (Nodo3); // chiamata al campo "Depurture" della richiesta str: = Query.FieldByName ("Depurture") AsString; // crea nodo di testo = valore del campo// assegna un valore al nodo // nodo di testo, variabile str Node.appendChild (txt); // operazioni simili per il tagCome risultato di questa procedura, viene generato il seguente testo di un documento XML:
![]() |
Per formare una richiesta, viene utilizzato il metodo Open dell'oggetto IXMLHttpRequest:
procedura Open (const bstrMethod, - method type = "POST" bstrUrl, - Server url varAsync, - modalità di comunicazione asincrona/sincrona = true bstrUser, - username per autenticazione bstrPassword) - passwordCreazione del lato server dell'elaborazione dei documenti
Come notato in precedenza, l'elaborazione di una richiesta HTTP può essere gestita da applicazioni CGI o servlet Java. È anche possibile la variante di scrittura di pagine ASP. Ma in questo caso, il trasferimento dei dati è possibile solo con il metodo "GET" tramite la stringa di query. Tuttavia, la gestione di una richiesta HTTP per le pagine ASP è più efficiente di un'applicazione CGI. Tuttavia, secondo me, non importa come elaborarlo, ma è più importante risolvere la domanda: come costruire un programma di elaborazione e non con quali mezzi.
Se dal capitolo precedente abbiamo esaminato le opzioni per formare un documento XML, il compito dell'applicazione server è l'opposto: analizzare i documenti XML. Di seguito è una parte del programma che analizza un documento xml:
procedura Tthread1.DataParser (mittente: oggetto); varia // dichiara gli oggetti DOMElement r, Nodo F: IXMLDOMElement; Str, nome file: stringa; parametro: Stringa; // dichiarazione di soclass e CoDocXML, CoDocXSL, CoDocResult: CoDomDocument; // Oggetto XMLDomDocument XMLDoc, XSLDoc, ResultDoc: DomDocument; // HttpStr: Stringa; - una variabile globale contenente la stringa di richiesta HTTP Inizio XMLDoc: = coDocXML.Create; XMLDoc.LoadXML (HttpStr); // ottiene l'indirizzo dell'elemento radice r: = Doc.Get_documentElement; // ottengo il valore dell'elemento FNode: = r.SelectSingleNode ("// TypeDocument"); // ottiene il valore dell'attributo id = "Ordine" FileName: = FNode.GetAttibute ("id"); // e formazione del nome del file Order.xsl NomeFile: = NomeFile + ".Xsl"; // crea un documento XSLDoc XSLDoc: = coDocXSL.Create; XSLDoc.LoadXML (NomeFile); // crea un documento XMLDoc DocumentoRisultato: = coDocResult.Create; // imposta la modalità di elaborazione sincrona ResultDoc.Set_async (falso); // imposta il controllo di analisi ResultDoc.validateOnParse: = vero; // analizza XMLDoc usando il modello XSL XMLDoc.transformNodeToObject (XSLDoc, ResultDoc); // alla variabile Str viene assegnato un valore di testo // del documento risultante. Str: = DocumentoRisultato.testo; // trova un elemento FNode: = r.SelectSingleNode ("// InvoiceNumber"); // e ottengo il valore dell'elemento parm: = FNode.testo; //chiudi la richiesta di accesso Query.Chiudi; Query.Text: = Str; // assegnazione del valore del parametro Query.Params.AsString: = parm; // esegue la richiesta Query.ExecSQL; fine;Il punto forte dell'analisi risiede nell'uso di un modello XSL, che viene generato individualmente per ogni tipo di documento. Il risultato dell'analisi è una stringa di query SQL. Successivamente, l'esecuzione della stringa di query SQL generata apporterà le modifiche necessarie ai dati nel DBMS.
Il vantaggio dell'utilizzo dell'analisi tramite un modello è anche che si ottiene una sorta di flessibilità dei dati e si ottiene la completa indipendenza dell'algoritmo dal codice del programma. Di seguito il testo del template XSL utilizzato per elaborare un documento di tipo ORDER:
Spiegando l'esempio precedente, va notato che l'uso di una coppia di tag è di natura formale, poiché dopo l'analisi, il documento XML risultante deve contenere formalmente almeno un nodo. Il metodo ResultDoc.text assegna il valore di testo del ResultDoc ottenuto durante l'analisi del documento XML. In questo caso, il valore è tutto ciò che è incorniciato da una coppia di tag e, ad es. la query SQL che abbiamo generato.
Un'altra caratteristica della scrittura di un programma dovrebbe essere notata la possibilità di utilizzare il parametro SQL : num. L'utilizzo del parametro semplifica il testo del modello xsl. La definizione del valore degli elementi corrispondenti dei nodi del documento XML è determinata inizialmente dalla selezione del nome del nodo corrispondente, ad esempio:
XSL a colpo d'occhio
XSL è un acronimo derivato da eXtensible Stylesheet Language, un linguaggio di formattazione dei fogli di stile (dati XML). Come puoi vedere dall'intestazione, eXtensible Stylesheet Language (XSL) viene utilizzato per formattare i dati XML. Per definizione, il W3C XSL si compone di due parti:
- XSLT - Trasformazione XSL. Il linguaggio utilizzato per trasformare o formattare (trasformare) i documenti XML. Pertanto, con l'aiuto di XSLT, possiamo ottenere diversi tagli di un insieme di dati e forme di presentazione dei dati.
- Elementi di formattazione. Questi elementi includono tutti gli elementi tipografici dei dati dopo che sono stati elaborati con XSL. Utilizzato solo per la generazione di pagine HTML.
Con l'aiuto di XSLT, possiamo selezionare i dati di cui abbiamo bisogno da un file XML e disporli in un modulo per la presentazione all'utente. Ad esempio, nel nostro caso, abbiamo trasformato i dati XML sotto forma di una query SQL. L'uso classico di XSL consiste solitamente nella formattazione dei dati sotto forma di pagine HTML o, più raramente, sotto forma di file RTF.
Il file XSL descrive un modello, in base al quale verrà eseguita la trasformazione dei dati XML. Tornando ai template xsl, in XSLT si possono distinguere i seguenti elementi (direttive):
Direttive XSL | descrizione |
---|---|
xsl: applicare-modelli | Una direttiva che indica l'uso di modelli corrispondenti per l'attributo select = "nome modello" |
xsl: attributo | crea un albero di attributi e lo aggiunge all'elemento di output, nome parametro = "nome attributo", namespace è l'URI dello spazio dei nomi (prefisso dello spazio dei nomi) |
xsl: modello di chiamata | chiama un modello, nome attributo = "URI al modello" |
xsl: scegli xsl: quando xsl: altrimenti |
selezione per condizione xsl: quando expr = "valutazione dell'espressione sullo script", language = "nome-lingua" test = "espressione valutata" |
xsl: commento | genera un commento nel documento di output |
xsl: copia xsl: copia di |
copia il nodo corrente nell'origine di output o inserisce un frammento di documento in un nodo in cui l'attributo select = "nome nodo di origine" |
xsl: elemento | crea un elemento di output per nome, nome attributo = "nome elemento", spazio dei nomi = "riferimento spazio dei nomi uri" |
xsl: per ogni | riapplica il modello a tutti i nodi dell'elenco dei nodi, l'attributo select specifica l'elenco dei nodi |
xsl: se | controllo delle condizioni, impostato dall'attributo test come espressione |
xsl: include | include template esterno, attributo href = "riferimento URI" |
xsl: uscita | specifica l'output, l'attributo del metodo può essere "xml", "html" o "text" |
xsl: parametri | specifica il valore dei parametri, nome attributo = "nome parametro", select = "valore" |
xsl: istruzione di elaborazione | crea un'istruzione di elaborazione, nome attributo = "nome del processo di istruzione" |
xsl: sort | ordina insieme di nodi, attributi select = "nome nodo", tipo di dati = tipo di dati ("testo" | "numero" | Qname), ordine = direzione di ordinamento ("ascendente" | "discendente") |
xsl: foglio di stile | definisce un documento modello xsl, è l'elemento radice per XSLT |
xsl: modello | definisce un xsl-template, nome attributo = "prefisso URI al nome del modello", match = "un'indicazione del nodo a cui è applicato il modello" |
xsl: testo | genera testo nel flusso di output, attributo disable-output-escaping = "yes" o "no", indica la capacità di generare caratteri ESC |
xsl: valore-di | inserisce il valore del nodo selezionato come testo, attributo select = "puntatore al nodo" da cui viene preso il valore |
xsl: variabile | specifica il valore dei limiti della variabile, nome attributo = "nome variabile", select = "calcolo del valore della variabile" |
xsl: con-param | applica il parametro al modello, nome attributo = "nome parametro", select = espressione per valutare il contesto corrente, valore predefinito "." |
Conclusione
Infine, va notato che utilizzando il parser XML standard msxml.dll non è l'unico strumento per l'analisi e la creazione di documenti XML. Ad esempio, per creare documenti XML utilizzare in modo efficace i componenti TPageProduser e TableProduser... Ma questo articolo sottolinea solo l'ampiezza e l'applicabilità del modello DOM nella pratica.
L'autore sarà molto grato per il tuo feedback sulla pertinenza dell'argomento, il contenuto generale, lo stile di presentazione e tutti gli altri commenti che aiuteranno a migliorare ulteriormente la qualità della scrittura di una raccolta di articoli e l'uscita di un libro che copre il argomento del lato pratico dell'utilizzo di documenti XML nell'e-commerce. Informazioni più dettagliate sul lato pratico dell'uso dei documenti elettronici possono essere trovate sul sito web dell'autore www.eDocs.al.ru È inoltre previsto il posizionamento dei testi di partenza e degli esempi sul sito dell'autore.