Computer finestre Internet

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:

Burlesque impero Bob Dylan Stati Uniti d'America Colombia 10.90 1985 Nascondi il tuo cuore Bonnie tylor UK Record CBS 9.90 1988 ... Libera il mio cuore Joe cocker Stati Uniti d'America EMI 8.20 1987

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:

Burlesque impero Bob Dylan Stati Uniti d'America Colombia 10.90 1985

rimozione dell'elemento di chiusura sulla seconda riga:</p><p> <CD> <TITLE>Burlesque impero <ARTIST>Bob Dylan</ARTIST> <COUNTRY>Stati Uniti d'America</COUNTRY> <COMPANY>Colombia</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> </p><p>Ora scriviamo il codice che restituisce i valori delle proprietà dell'oggetto XMLDOMParseError:</p><p>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;</p><p>ed eseguire la nostra applicazione. Di conseguenza, otteniamo le seguenti informazioni sull'errore.</p> <p>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.</p> <p>Ora ripristineremo l'elemento di chiusura <TITLE>nel nostro documento e continuare la nostra discussione sul DOM XML.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Accesso all'albero dei documenti</h2> <p>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:</p><p>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;</p><p>Per il nostro documento XML, otteniamo il seguente testo.</p> <p>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.</p> <p>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.</p> <p>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:</p><p>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;</p><p>Per il nostro documento XML, otterremo il seguente testo</p> <p>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.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Ramo documento - Oggetto XMLDOMNode</h2> <p>L'oggetto XMLDOMNode rappresenta un ramo del documento. Abbiamo già incontrato questo oggetto quando abbiamo ottenuto l'elemento radice del documento:</p><p>Root: = XMLDoc.DocumentElement;</p><p>Per ottenere informazioni su un ramo di un documento XML, è possibile utilizzare le proprietà dell'oggetto XMLDOMNode (Tabella 1).</p> <p>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.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>Navigazione nell'albero del documento</h3> <p>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.</p> <p>Ora esaminiamo tutti i rami del documento XML:</p><p>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;</p><p>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.</p> <p>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:</p><p>Root: = XMLDoc.DocumentElement; Nodi: = Root.SelectNodes ("CD / PREZZO");</p><p>Tutti i sotto-rami PRICE del ramo CD verranno inseriti nella raccolta Nodes. Torneremo a discutere dei modelli XSL un po' più tardi.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>Manipolare i rami figli</h3> <p>Per manipolare i rami figli, possiamo usare i metodi dell'oggetto XMLDOMNode (Tabella 2).</p> <p>Per eliminare completamente il record relativo al primo disco, è necessario eseguire il seguente codice:</p><p>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);</p><p>Nota che in questo esempio stiamo eliminando il primo ramo figlio. Di seguito è mostrato come rimuovere il primo elemento del primo ramo figlio:</p><p>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);</p><p>Nell'esempio sopra, abbiamo eliminato non il primo ramo <CD>…</CD> e il primo elemento del ramo è <TITLE>….

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 - NewNode: = XMLDoc.CreateNode (1, 'CD', ''); // Aggiungi un elemento Child: = XMLDoc.CreateNode (1, 'TITLE', ''); // Aggiunge un elemento NewNode.AppendChild (Child); // E imposta il suo valore Child.Text: = 'Pink Floyd'; // Aggiungi un elemento <ARTIST>Figlio: = XMLDoc.CreateNode (1, 'ARTISTA', ''); // Aggiunge un elemento NewNode.AppendChild (Child); // E imposta il suo valore Child.Text: = 'Division Bell'; // Aggiungi un elemento <COUNTRY>Figlio: = XMLDoc.CreateNode (1, 'PAESE', ''); // Aggiunge un elemento NewNode.AppendChild (Child); // E imposta il suo valore Child.Text: = 'UK'; // Aggiungi un elemento <COMPANY>Figlio: = XMLDoc.CreateNode (1, 'AZIENDA', ''); // Aggiunge un elemento NewNode.AppendChild (Child); // E imposta il suo valore Child.Text: = 'EMI Records Ltd.'; // Aggiungi un elemento <PRICE>Child: = XMLDoc.CreateNode (1, 'PRICE', ''); // Aggiunge un elemento NewNode.AppendChild (Child); // E imposta il suo valore Child.Text: = '11 .99 "; // Aggiungi un elemento <YEAR>Child: = XMLDoc.CreateNode (1, 'YEAR', ''); // Aggiunge un elemento NewNode.AppendChild (Child); // E imposta il suo valore Child.Text: = '1994'; // E aggiungi un ramo Root.AppendChild (NewNode); ...</p><p>Il codice sopra mostra la seguente sequenza di passaggi per aggiungere un nuovo ramo:</p> <ul><li>Creazione di un nuovo ramo utilizzando il metodo CreateNode: <ul><li>creare un elemento usando il metodo CreateNode;</li> <li>aggiungere un elemento a un ramo usando il metodo AppendChild;</li> <li>impostare il valore di un elemento tramite la proprietà Text;</li> <li>… Ripetere per tutti gli elementi.</li> </ul></li> <li>Aggiunta di un nuovo ramo al documento utilizzando il metodo AppendChild.</li> </ul><p>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.</p> <h2>Set di rami - oggetto XMLDOMNodeList</h2> <p>L'oggetto XMLNodeList contiene un elenco di rami, che possono essere compilati utilizzando i metodi SelectNodes o GetElementsByTagName e ottenuti anche dalla proprietà ChildNodes.</p> <p>Abbiamo già discusso l'uso di questo oggetto nell'esempio fornito nella sezione "Navigazione nell'albero del documento". Qui forniremo alcuni commenti teorici.</p> <p>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.</p> <p>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.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Crea e salva documenti</h2> <p>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):</p><p>Var XMLDoc: IXMLDOMDocument; Radice: IXMLDOMNode; Nodo: IXMLDOMNode; S: Stringa Larga; ... S: = ' <CATALOG></CATALOG>'; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = Falso; XMLDoc.LoadXML (S); Root: = XMLDoc.DocumentElement; Nodo: = XMLDoc.CreateNode (1, 'CD', ''); Root.AppendChild (nodo); Memo1.Lines.Add (XMLDoc.XML); ... XMLDoc: = Nessuno;</p><p>Dopo aver creato il documento XML, salvalo in un file utilizzando il metodo Save. Ad esempio:</p> <p>XMLDoc.Save ('C: \ DATA \ NEWCD.XML');</p> <p>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:</p><p>Procedura TForm1.Button2Click (Mittente: TObject); var XMLDoc2: IXMLDOMDocument; iniziare XMLDoc2: = CoDOMDocument.Create; XMLDoc.Salva (XMLDoc2); Memo2.Lines.Add (XMLDoc2.XML); ... XMLDoc2: = Nessuno; fine;</p><p>In conclusione, il metodo Save consente anche di salvare il documento XML in altri oggetti COM che supportano le interfacce IStream, IPersistStream o IPersistStreamInit.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Utilizzo dei modelli XSL</h2> <p>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:</p><p>Per sapere quali dischi di artisti escono negli USA, la richiesta si forma come segue:</p><p>Nodi: = Root.SelectNodes ("CD / ARTISTA");</p><p>Ecco come trovare la prima unità in una directory:</p><p>Nodi: = Root.SelectNodes ("CD / TITLE");</p><p>E ultimo:</p><p>Nodi: = Root.SelectNodes ("CD / TITLE");</p><p>Per trovare i dischi di Bob Dylan, puoi eseguire la seguente query:</p><p>Nodi: = Root.SelectNodes (‘CD [$ any $ ARTIST =” Bob Dylan ”] / TITLE’);</p><p>e per ottenere un elenco di dischi realizzati dopo il 1985, eseguiamo la seguente query:</p><p>Nodi: = Root.SelectNodes ("CD / TITLE");</p><p>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 <TD>…</TD>.</p> <p>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).</p> <p>Il codice per sovrapporre un modello XSL sulla nostra directory è simile a questo:</p><p>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;</p><p>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.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Conclusione</h2> <p>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.</p> <p>ComputerPress 12" 2000</p> <p>Per molti programmatori Delphi, il salvataggio delle impostazioni è associato all'utilizzo <i>INI</i> 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. <br><br>Tuttavia, strutturato <i>XML</i> File. Il loro vantaggio è che il numero di parametri potrebbe non essere fisso. Per capirlo meglio, considera un esempio specifico.</p><p>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 <i>INI</i> 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.</p><p><img src='https://i2.wp.com/zoo-mania.ru/wp-content/uploads/2011/08/settings.ini_.jpg' height="145" width="247" loading=lazy loading=lazy><br>Applicare un approccio usando <i>XML</i> 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 <i>XML</i> Delphi ha molti svantaggi, quindi consiglio di usare la libreria standard <b>MSXML</b>... Di solito è incluso di default con i sistemi operativi della famiglia Windows.</p><p><img src='https://i1.wp.com/zoo-mania.ru/wp-content/uploads/2011/08/settings.xml_.jpg' align="center" width="100%" loading=lazy loading=lazy><br>Per connettere <b>MSXML</b>, 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 <b>MSXML2_TLB.PAS</b> 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 <b>MSXML</b>, devi solo aggiungere la riga MSXML2_TLB a use.</p><p>Per chiarezza, si consideri il seguente esempio di utilizzo di questa libreria:</p><p>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;</p><p>Innanzitutto, viene creata un'istanza della classe DOMDocument, quindi il contenuto del file settings.xml viene caricato in memoria. Poiché, secondo lo standard, qualsiasi <i>XML</i> il file deve contenere il tag radice (in questo caso <i>config</i>), quindi dobbiamo ottenerlo usando la funzione <i>DocumentElement</i>... Quindi il contenuto viene visualizzato tra i tag. <width></width>, che a loro volta sono tra i tag <size></size>... Pertanto, dal file settings.xml, il nostro metodo visualizzerà il testo nel MessageBox <i>"100 pixel"</i>.</p><p> <?xml version="1.0" encoding="utf-8"?> <config> <size> <height>500 px</height> <width>100 px</width> </size> </config> </p><p>Qui viene applicato il metodo SelectSingleNode, che accetta una stringa come parametro</p> <p>ORDINA LA SOLUZIONE DEL PROBLEMA SU DELPHI <br>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.</p> <p>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. <br></p> <h2>Qual è la sintassi di un linguaggio di programmazione?</h2> <p>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.</p><p>Nel linguaggio di programmazione C++, lo stesso ciclo è scritto in modo leggermente diverso: for (n = 1; n Scriviamo una calcolatrice</p><p>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.</p> <p>Usiamo l'ambiente di sviluppo Lazarus per scrivere. La sua funzionalità non è ricca come, ad esempio, CodeGear, ma è disponibile gratuitamente ed è destinata alla formazione.</p><p>Aprendo l'ambiente di sviluppo, vediamo il form e la cassetta degli attrezzi. Ecco il modulo.</p> <p><img src='https://i2.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-24.jpg' width="100%" loading=lazy loading=lazy></p><p>Ecco la cassetta degli attrezzi.</p><p>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.</p><p>Questi sono campi di testo per l'input e un normale pulsante. Ti imbatti in questi elementi utilizzando quasi tutti i programmi Windows. Guarda.</p><p><img src='https://i2.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-27.jpg' width="100%" loading=lazy loading=lazy><br></p> <p>Ora ripuliamo queste etichette. Fare clic sulla scheda "Visualizza". E fai clic sulla voce "Ispettore oggetti. Apparirà una finestra come questa.</p><p><img src='https://i1.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-28.jpg' width="100%" loading=lazy loading=lazy></p><p>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.</p><p>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.</p><p><img src='https://i1.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-29.jpg' width="100%" loading=lazy loading=lazy></p><p>Di conseguenza, il nostro modulo è simile a questo.</p><p><img src='https://i1.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-30.jpg' width="100%" loading=lazy loading=lazy><br></p> <p>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.</p><p><img src='https://i2.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-31.jpg' width="100%" loading=lazy loading=lazy></p><p>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.</p><p><img src='https://i1.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-32.jpg' width="100%" loading=lazy loading=lazy></p><p>Dobbiamo scrivere 5 righe di codice così semplici. Commenti e spiegazioni possono essere visti nella foto sopra. Successivamente, premiamo questo pulsante.</p> <p>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.</p><p><img src='https://i0.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-34-2.jpg' width="100%" loading=lazy loading=lazy></p> <h2>Conclusione</h2> <p>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.</p><p><span class="6qR5tjJKK3g"></span></p> <p>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.</p> <p>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.</p> <p>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.</p> <p>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).</p> <p>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.</p> <p>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.</p> <p>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.</p> <p>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.</p> <p>Gli strumenti Delphi sono usati per importare da un server COM <i>msxml.dll</i>, 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: <b>Progetto | Importazione della libreria dei tipi:</b>(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 <b>Crea unità</b>). Utilizzando il file TLB, il framework genera un file di descrizione del server COM "Pascal" - MSXML_TLB.pas</p> <p>Il file MSXML_TLB.pas descrive tutte le interfacce, le costanti e le coclassi del server COM.</p> <p>Per accedere agli oggetti di un elemento COM, è necessario nella direttiva <b>USI</b> 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.</p> <b>usa</b> Windows, Messaggi, SysUtils, Classi, Grafica, Controlli, Moduli, Finestre di dialogo, OleServer, MSXML_TLB, StdCtrls; <b>genere</b> TForm1 = <b>classe</b>(TForm) Button1: TButton; Memo1: TMemo; <b>procedura</b> Button1Click (mittente: TObject); <b>fine;</b> <b>varia</b> Modulo1: TForm1; <b>implementazione</b>($ R * .DFM) <b>Procedura</b> TForm1.Button1Click (mittente: oggetto); <span>// dichiarazione della soclass dell'oggetto DOMDocument;</span> <b>varia</b> coDoc: CoDOMDocument; <span>// classe coerente con l'interfaccia IDOMDocument;</span> <b>varia</b> Doc: IXMLDOMDocument; <b>inizio</b> <span>// crea un'istanza dell'oggetto DOMDocument;</span> Doc: = coDoc.Crea; <span>// chiama il metodo Load di un'istanza dell'oggetto DOMDocument;</span> Doc.load ("data.xml"); <span>// accedere alla proprietà xml dell'istanza DOMDocument;</span> Memo1.Testo: = Doc.xml; <b>fine;</b> <b>fine.</b> <h2>DOM Concept - Document Object Model</h2> <p>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.</p> <p>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.</p> <p>Una descrizione più completa dell'interfaccia dell'oggetto DOM può essere trovata su</p> <table cellspacing="0" cellpadding="4" width="500" border="1"><tbody><tr><td valign="top" colspan="2">XMLDOMDocument oggetto</td> </tr><tr><td valign="top" colspan="2">Rappresenta il livello più alto della gerarchia degli oggetti e contiene metodi per lavorare con un documento: caricarlo, analizzarlo, creare elementi, attributi, commenti, ecc. ...</td> </tr><tr><td valign="top" colspan="2"><b>Proprietà</b> </td> </tr><tr><td valign="top" width="39%"><b>Asincrono</b> </td> <td valign="top" width="61%">Proprietà che identifica la modalità di elaborazione corrente</td> </tr><tr><td valign="top" width="39%" height="19"><b>ParseError</b> </td> <td valign="top" width="61%" height="19">Restituisce un riferimento all'oggetto di gestione degli errori XMLDOMParseError</td> </tr><tr><td valign="top" width="39%"><b>Abilita - disabilita la verifica del documento.</b> </td> <td> </td> </tr><tr><td valign="top" width="39%"><b>URL</b> </td> <td valign="top" width="61%">Restituisce l'URL del documento</td> </tr><tr><td valign="top" width="39%"><b>documentElement</b> </td> <td valign="top" width="61%">Contiene un riferimento all'elemento radice del documento come oggetto XMLDOMElement.</td> </tr><tr><td valign="top" colspan="2"><b>metodi</b> </td> </tr><tr><td valign="top" width="39%"><b>caricare (URL) <br>loadXML (xmlString)</b> </td> <td valign="top" width="61%">Carica un documento XML,</td> </tr><tr><td valign="top" width="39%"><b>salva (objTarget)</b> </td> <td valign="top" width="61%">Salva il documento XML su file</td> </tr><tr><td valign="top" width="39%"><b>abortire</b> </td> <td valign="top" width="61%">Interruzione del processo di caricamento ed elaborazione del documento.</td> </tr><tr><td valign="top" width="39%"><b>createAttribute (nome)</b> </td> <td valign="top" width="61%">Crea un nuovo attributo con il nome specificato per l'elemento corrente.</td> </tr><tr><td valign="top" width="39%"><b>createNode (Tipo, nome, nomeSpaceURI)</b> </td> <td valign="top" width="61%">Crea un nodo del tipo e del nome specificati</td> </tr><tr><td valign="top" width="39%"><b>createElement (tagName)</b> </td> <td valign="top" width="61%">Crea un elemento del documento con il nome specificato.</td> </tr><tr><td valign="top" width="39%"><b>createTextNode (dati)</b> </td> <td valign="top" width="61%">Crea testo all'interno di un documento</td> </tr><tr><td valign="top" width="39%"><b>getElementsByTagName (nome tag)</b> </td> <td valign="top" width="61%">Restituisce un riferimento alla raccolta di elementi del documento con il nome dato</td> </tr><tr><td valign="top" width="39%"><b>nodeFromID (idString)</b> </td> <td valign="top" width="61%">Trova un elemento per ID</td> </tr></tbody></table><br><table cellspacing="0" cellpadding="4" width="500" border="1"><tbody><tr><td valign="top" colspan="2"> <b>Oggetto XMLDOMNode</b> </td> </tr><tr><td valign="top" colspan="2">Un oggetto XMLDOMNode che implementa l'interfaccia DOM sottostante <b>Nodo</b>, è 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.</td> </tr><tr><td valign="top" colspan="2"><b>Proprietà</b> </td> </tr><tr><td valign="top" width=" "><b>NomeNodo, NomeBase</b> </td> <td valign="top" width="65%">Restituisce il nome del nodo corrente.</td> </tr><tr><td valign="top" width="35%"><b>prefisso</b> </td> <td valign="top" width="65%">Restituisce il prefisso dello spazio dei nomi.</td> </tr><tr><td valign="top" width="35%"><b>tipo di dati</b> </td> <td valign="top" width="65%">Specifica il tipo di contenuto del nodo corrente</td> </tr><tr><td valign="top" width="35%"><b>nodeType, nodeTypeString</b> </td> <td valign="top" width="65%">Restituisce il tipo del nodo corrente:</td> </tr><tr><td valign="top" width="35%"><b>attributi</b> </td> <td valign="top" width="65%">Ottiene un elenco degli attributi del nodo corrente come raccolta XMLDOMNamedNodeMap.</td> </tr><tr><td valign="top" width="35%"><b>testo</b> </td> <td valign="top" width="65%">Restituisce il contenuto del sottoalbero corrente come testo</td> </tr><tr><td valign="top" width="35%"><b>xml</b> </td> <td valign="top" width="65%">Restituisce una rappresentazione XML del sottoalbero corrente.</td> </tr><tr><td valign="top" width="35%"><b>nodeValue</b> </td> <td valign="top" width="65%">Restituisce il contenuto del nodo corrente.</td> </tr><tr><td valign="top" width="35%"><b>childNodes</b> </td> <td valign="top" width="65%">Restituisce un elenco di elementi figlio come XMLDOMNodeList.</td> </tr><tr><td valign="top" width="35%"><b>primo figlio, ultimo figlio</b> </td> <td valign="top" width="65%">Restituisce il primo/ultimo figlio</td> </tr><tr><td valign="top" width="35%"><b>precedenteSibling, nextSibling</b> </td> <td valign="top" width="65%">Restituisce il fratello precedente/successivo.</td> </tr><tr><td valign="top" width="35%"><b>parentNode</b> </td> <td valign="top" width="65%">Contiene un collegamento all'elemento padre.</td> </tr><tr><td valign="top" width="35%"><b>proprietarioDocumento</b> </td> <td valign="top" width="65%">Restituisce un puntatore al documento contenente il nodo corrente.</td> </tr><tr><td valign="top" colspan="2"><b>metodi</b> </td> </tr><tr><td valign="top" width="35%"><b>appendChild (newChild)</b> </td> <td valign="top" width="65%">Aggiunge un nuovo figlio al nodo corrente.</td> </tr><tr><td valign="top" width="35%"><b>insertBefore (newChild, refChild)</b> </td> <td valign="top" width="65%">Inserisce un nodo figlio, posizionandolo nel sottoalbero corrente a sinistra del nodo specificato da refChild.</td> </tr><tr><td valign="top" width="35%"><b>cloneNode (profondo)</b> </td> <td valign="top" width="65%">Crea una copia dell'elemento corrente.</td> </tr><tr><td valign="top" width="35%"><b>getAttribute</b><b>(nome) <br> </b><b>getAttributeNode</b><b><span>(nome) <br>setAttribute (nome, valore) <br>setAttributeNode (XMLDOMAttribute)</span> </b> </td> <td valign="top" width="65%">Accesso agli attributi (creazione, lettura, scrittura) dell'oggetto. Name è il nome dell'attributo, value è il suo valore. Restituisce il valore di un oggetto XMLDOMAttribute.</td> </tr><tr><td valign="top" width="35%"><b>sostituisciChild (newChild, oldChild) removeChild (oldChild)</b> </td> <td valign="top" width="65%">Sostituzione dell'oggetto oldChild dell'elenco corrente di oggetti figlio con newChild. Eliminazione oggetto oldChild</td> </tr><tr><td valign="top" width="35%"><b>selectNodes (patternString) selectSingleNode (patternString)</b> </td> <td valign="top" width="65%">Restituisce un oggetto XMLDOMNodeList selezionato dal modello di ricerca o dal primo nodo</td> </tr><tr><td valign="top" width="35%"><b>transformNode (foglio di stile) <br>transformNodeToObject (foglio di stile, outputObject)</b> </td> <td valign="top" width="65%">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.</td> </tr></tbody></table><br><h2>Utilizzo di XML nel mondo degli affari.</h2> <p>Per un'immagine più chiara, è necessaria una spiegazione e perché tutto ciò è necessario per capire come funziona:</p> <p>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.</p> <p>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.</p> <p>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.</p> <p>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.</p> <p>Di seguito è riportato il seguente algoritmo di scambio tipico:</p> <br>Figura 3. <ol><li><b>Impresa A</b> iniziati <b>processo A</b>(ordine prodotto), che funge da client WEB.</li><li><b>Processo A</b> 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).</li><li>Il server WEB analizza la richiesta e genera un server <b>Processo B</b> passando il corpo del documento XML come parametro. <br>Il processo B viene avviato dal server WEB e viene elaborato come pagina ASP, CGI (ISAPI) - applicazione o server JAVA (applicazione server)</li><li><b>Processo B</b>- genera una richiesta al server del database SQL.</li><li>Il server SQL esegue le operazioni necessarie nel database, genera una risposta e la restituisce <b>Processo B</b>.</li><li>Secondo la risposta del server SQL <b>Processo B</b> genera un documento XML (risposta) e lo restituisce come risposta a una richiesta http all'applicazione client.</li><li>Inoltre, a seconda della situazione sul lato client, viene formata una nuova richiesta http o la sessione termina.</li> </ol><h2>Qualche parola sull'organizzazione del flusso di documenti.</h2> <p>La regola generale per lo sviluppo di un sistema per lo scambio di documenti XML è:</p><ul><li><b>in primo luogo</b>- sviluppo di un diagramma di flusso dei documenti elettronici e loro struttura;</li><li><b>secondo</b>- sviluppo di tabelle di funzioni di processo (sottoprocessi), ad es. quale funzione rispetto a quale documento XML ogni processo implementerà.</li> </ul><p>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:</p> <p>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.</p> <p>Per il Processo avviato dal server, è preferibile (ma non necessario) costruire l'algoritmo di elaborazione come segue:</p> <img src='https://i1.wp.com/codenet.ru/np-includes/upload/2005/01/05/128666.jpg' height="500" width="408" loading=lazy loading=lazy><br>Figura 6. <h2>Alcuni punti fondamentali nella creazione del lato client</h2> <p>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.</p> <b>procedura</b> TThread1.HeaderCreate (mittente: oggetto); <b>varia</b> <span>// dichiarazione di classe, necessaria per creare</span> coDoc: CoDomDocument; <span>// Oggetto XMLDomDocument</span> Doc: DomDocument; r: IXMLDOMElement; Nodo: IXMLDOMElement; // DOMText txt: IXMLDOMText; // DOMAttribute attr: IXMLDOMAttribute; <b>inizio</b> <span>// crea un documento DOM</span> Doc: = coDoc.Crea; Doc.Set_async (falso); <span>// avvio iniziale del documento DOM</span> Doc.LoadXML (" <Header/>"); <span>// crea DOMElement (tag<<b>Mittente</b>>) </span> Nodo: = Doc.createElement ("Mittente"); <span>// crea un nodo di testo " <b>Typhoon LLC</b>" </span> txt: = Doc.createTextNode ("Typhoon LLC"); <span>// assegnazione al nodo<<b>Mittente</b>> valore</span> <span>// nodo di testo " <b>Typhoon LLC</b>" </span> Node.appendChild (txt); <span>// aggiungi elemento<<b>Mittente</b>> alla radice del documento da bambino</span> r.appendChild (Nodo); <span> <<b>A partire dal</b>> </span> Nodo: = Doc.createElement ("Da"); txt: = Doc.createTextNode ("http://tayfun.ru/xml/default.asp"); Node.appendChild (txt); r.appendChild (Nodo); <span>// operazioni simili per il tag<<b>a</b>> </span> Nodo: = Doc.createElement ("A"); txt: = Doc.createTextNode ("http://irbis.ru"); Node.appendChild (txt); r.appendChild (Nodo); <span>// crea DOMElement()</span> Nodo: = Doc.createElement ("TypeDocument"); <span>// crea il nodo XMLDOMAttribute</span> Att: = Doc.createAttribute ("Id", "Ordine"); <span> // <TypeDocument Id="Order"/> </span> Node.appendChild (Att); r.appendChild (Nodo); <b>fine;</b> <p>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).</p> <p>Il risultato del lavoro del programma precedente sarà l'intestazione creata, applicata al nostro esempio xml-document: mostrato in Figura 5.</p> <img src='https://i0.wp.com/codenet.ru/np-includes/upload/2005/01/05/128662.gif' height="116" width="298" loading=lazy loading=lazy><br>Figura 5. <p><img src='https://i2.wp.com/codenet.ru/np-includes/upload/2005/01/05/128664.gif' height="179" width="385" loading=lazy loading=lazy><br>Figura 6.</p><p>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</p> <p>Per generare un documento xml contenente una fattura, viene inizialmente creata una query SQL (query A) con informazioni sulla fattura stessa:</p> <b>SELEZIONARE</b>* DA Fattura_Generale <b>DOVE</b> InvoiceNum =: num <b>SELEZIONARE</b> Merci, Qulity, Prezzo, HZ_cod <b>A PARTIRE DAL</b> Merce <b>DOVE</b> InvoiceNum =: num <span>//: num è un parametro che specifica il numero della fattura.</span> <p>Di seguito una parte del programma che genera il corpo del documento xml:</p> <b>procedura</b> TThread1.DataBodyCreate (mittente: oggetto); <b>varia</b> <span>// dichiarazione della classe e dell'oggetto XMLDomDocument</span>// coDoc: CoDomDocument; <span>// deve essere globale per l'intero modulo.</span>// Doc: DomDocument; <span>// dichiara gli oggetti DOMElement</span> r: IXMLDOMElement; // Elemento DOME; Nodo, Nodo2: IXMLDOMElement; Nodo3, Nodo4: IXMLDOMElement; // DOMText txt: IXMLDOMText; str: stringa; <span>// Numero di fattura: <b>numero intero;</b>- variabile globale - // ha il valore 987654 // queryA, queryB: <b>Corda;</b>- 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)</span> <b>inizio</b> Query.Chiudi; <span>// vedere il testo "richiesta A"</span> Query.Text: = queryA; <span>// esegue la richiesta</span> Query.ExecSQL; Query.Apri; <span>// ottiene l'indirizzo dell'elemento radice</span> r: = Doc.Get_documentElement; Nodo2: = Doc.createElement ("Richiesta"); <span>// crea DOMElement (tag)</span> Nodo: = Doc.createElement ("Fattura"); <span>// aggiungi un elemento alla radice</span> r.appendChild (Nodo2); <span>// aggiungi un elemento a</span> Nodo2. appendChild (Nodo); <span>// crea DOMElement (tag)</span> Nodo3: = Doc.createElement ("Depurture"); <span>// aggiungi un elemento a</span> Nodo. appendChild (Nodo3); <span>// chiamata al campo "Depurture" della richiesta</span> str: = Query.FieldByName ("Depurture") AsString; <span>// crea nodo di testo = valore del campo</span><span>// assegna un valore al nodo</span> <span>// nodo di testo, variabile str</span> Node.appendChild (txt); <span>// operazioni simili per il tag <Destination>, <DataSend>, // <DataDepurture>, <Currency> // <DestinationCompany>(campo DB "Destinatario")</span> Nodo: = Doc.createElement ("Destinazione"); <span>// il nome del campo del database potrebbe non essere lo stesso del nome</span> str: = Query.FieldByName ("Destinatario") .AsString; <span>// tag, questo è il vantaggio di usare</span> txt: = Doc.createTextNode (str); <span>// DOM dell'interfaccia davanti a un DBMS che supporta l'interfaccia XML, // come ORACLE 8i o Ms SQL 2000</span> Node.appendChild (txt); ... <span>// generando una richiesta per una specifica per le merci</span> <span>//chiudi la richiesta di accesso</span> Query.Chiudi; <span>// vedere nel testo "richiesta B", info. A proposito di merci</span> Query.Text: = queryВ; <span>// assegnazione dei valori dei parametri</span> Query.Params.AsInteger: = InvoiceNumber; <span>// esegue la richiesta</span> Query2.ExecSQL; <span>// accesso aperto per richiedere dati</span> Query.Apri; <span>// crea DOMElement (tag)</span> Nodo3: = Doc.createElement ("Imems"); <span>// aggiungi un elemento a</span> Nodo. appendChild (Nodo3); <span>// scorre tutte le righe della query</span> <b>mentre</b> <b>non</b> Eof.Query <b>fare</b> begin Node4: = Doc.createElement ("Imem"); <span>// aggiungi un elemento a</span> Node3.appendChild (Nodo4); <span>// formazione dei dati per il tag</span> str: = Query.FieldByName ("Prezzo") AsString; txt: = Doc.createTextNode (str); Node.appendChild (txt); ... <span>// operazioni simili per i tag <HZ_Cod>, <Quality>, <GoodName> </span> <b>fine;</b> <b>fine;</b> <p>Come risultato di questa procedura, viene generato il seguente testo di un documento XML:</p> <table width="100%"><tbody><tr><td align="middle"><br><img src='https://i1.wp.com/codenet.ru/np-includes/upload/2005/01/05/128661.gif' width="100%" loading=lazy loading=lazy></td> </tr></tbody></table><p>Per formare una richiesta, viene utilizzato il metodo Open dell'oggetto <b>IXMLHttpRequest</b>:</p> <b>procedura</b> Open (const bstrMethod, - method type = "POST" bstrUrl, - Server url varAsync, - modalità di comunicazione asincrona/sincrona = true bstrUser, - username per autenticazione bstrPassword) - password <h2>Creazione del lato server dell'elaborazione dei documenti</h2> <p>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.</p> <p>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:</p> <b>procedura</b> Tthread1.DataParser (mittente: oggetto); <b>varia</b> <span>// dichiara gli oggetti DOMElement</span> r, Nodo F: IXMLDOMElement; Str, nome file: stringa; parametro: Stringa; <span>// dichiarazione di soclass e</span> CoDocXML, CoDocXSL, CoDocResult: CoDomDocument; <span>// Oggetto XMLDomDocument</span> XMLDoc, XSLDoc, ResultDoc: DomDocument; <span>// HttpStr: Stringa; - una variabile globale contenente la stringa di richiesta HTTP</span> <b>Inizio</b> XMLDoc: = coDocXML.Create; XMLDoc.LoadXML (HttpStr); <span>// ottiene l'indirizzo dell'elemento radice</span> r: = Doc.Get_documentElement; <span>// ottengo il valore dell'elemento</span> FNode: = r.SelectSingleNode ("// TypeDocument"); <span>// ottiene il valore dell'attributo id = "Ordine"</span> FileName: = FNode.GetAttibute ("id"); <span>// e formazione del nome del file Order.xsl</span> NomeFile: = NomeFile + ".Xsl"; <span>// crea un documento XSLDoc</span> XSLDoc: = coDocXSL.Create; XSLDoc.LoadXML (NomeFile); <span>// crea un documento XMLDoc</span> DocumentoRisultato: = coDocResult.Create; <span>// imposta la modalità di elaborazione sincrona</span> ResultDoc.Set_async (falso); <span>// imposta il controllo di analisi</span> ResultDoc.validateOnParse: = vero; <span>// analizza XMLDoc usando il modello XSL</span> XMLDoc.transformNodeToObject (XSLDoc, ResultDoc); <span>// alla variabile Str viene assegnato un valore di testo</span> <span>// del documento risultante.</span> Str: = DocumentoRisultato.testo; <span>// trova un elemento</span> FNode: = r.SelectSingleNode ("// InvoiceNumber"); <span>// e ottengo il valore dell'elemento</span> parm: = FNode.testo; <span>//chiudi la richiesta di accesso</span> Query.Chiudi; Query.Text: = Str; <span>// assegnazione del valore del parametro</span> Query.Params.AsString: = parm; <span>// esegue la richiesta</span> Query.ExecSQL; <b>fine;</b> <p>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.</p> <p>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:</p><p> <!-- файл Order.xsl --> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <xsl:for-each select="//header">INSERIRE in TABREG (FROM, TO, TYPEDOC, body) VALUES (" <xsl:value-of select="from" />", "<xsl:value-of select="to" />", "<xsl:value-of select="TypeDocument/@id" />") </xsl:for-each> <xsl:for-each select="//item">INSERISCI nella MERCE (numerofattura, nome, prezzo, qualità) VALORI (": num", " <xsl:value-of select="name" />", "<xsl:value-of select="price" />", "<xsl:value-of select="quality" /> ") </xsl:for-each> </xsl:template> </xsl:stylesheet> </p><p>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.</p> <p>Un'altra caratteristica della scrittura di un programma dovrebbe essere notata la possibilità di utilizzare il parametro SQL <b>: num.</b> 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:</p><h2>XSL a colpo d'occhio</h2> <p>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:</p> <ul><li>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.</li><li>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.</li> </ul><p>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.</p> <p>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):</p> <table cellspacing="0" cellpadding="4" width="500" border="1"><tbody><tr><td valign="top" width="31%"> <b>Direttive XSL</b> </td><th align="middle" width="69%"> <b>descrizione</b> </th> </tr><tr><td>xsl: applicare-modelli</td> <td>Una direttiva che indica l'uso di modelli corrispondenti per l'attributo select = "nome modello"</td> </tr><tr><td>xsl: attributo</td> <td>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)</td> </tr><tr><td>xsl: modello di chiamata</td> <td>chiama un modello, nome attributo = "URI al modello"</td> </tr><tr><td>xsl: scegli <br>xsl: quando <br>xsl: altrimenti</td> <td>selezione per condizione xsl: quando expr = "valutazione dell'espressione sullo script", <br>language = "nome-lingua" <br>test = "espressione valutata"</td> </tr><tr><td>xsl: commento</td> <td>genera un commento nel documento di output</td> </tr><tr><td>xsl: copia <br>xsl: copia di</td> <td>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"</td> </tr><tr><td>xsl: elemento</td> <td>crea un elemento di output per nome, nome attributo = "nome elemento", spazio dei nomi = "riferimento spazio dei nomi uri"</td> </tr><tr><td>xsl: per ogni</td> <td>riapplica il modello a tutti i nodi dell'elenco dei nodi, l'attributo select specifica l'elenco dei nodi</td> </tr><tr><td>xsl: se</td> <td>controllo delle condizioni, impostato dall'attributo test come espressione</td> </tr><tr><td>xsl: include</td> <td>include template esterno, attributo href = "riferimento URI"</td> </tr><tr><td>xsl: uscita</td> <td>specifica l'output, l'attributo del metodo può essere "xml", "html" o "text"</td> </tr><tr><td>xsl: parametri</td> <td>specifica il valore dei parametri, nome attributo = "nome parametro", select = "valore"</td> </tr><tr><td>xsl: istruzione di elaborazione</td> <td>crea un'istruzione di elaborazione, nome attributo = "nome del processo di istruzione"</td> </tr><tr><td>xsl: sort</td> <td>ordina insieme di nodi, attributi select = "nome nodo", tipo di dati = tipo di dati ("testo" | "numero" | Qname), ordine = direzione di ordinamento ("ascendente" | "discendente")</td> </tr><tr><td>xsl: foglio di stile</td> <td>definisce un documento modello xsl, è l'elemento radice per XSLT</td> </tr><tr><td>xsl: modello</td> <td>definisce un xsl-template, nome attributo = "prefisso URI al nome del modello", match = "un'indicazione del nodo a cui è applicato il modello"</td> </tr><tr><td>xsl: testo</td> <td>genera testo nel flusso di output, attributo disable-output-escaping = "yes" o "no", indica la capacità di generare caratteri ESC</td> </tr><tr><td>xsl: valore-di</td> <td>inserisce il valore del nodo selezionato come testo, attributo select = "puntatore al nodo" da cui viene preso il valore</td> </tr><tr><td>xsl: variabile</td> <td>specifica il valore dei limiti della variabile, nome attributo = "nome variabile", select = "calcolo del valore della variabile"</td> </tr><tr><td>xsl: con-param</td> <td>applica il parametro al modello, nome attributo = "nome parametro", select = espressione per valutare il contesto corrente, valore predefinito "."</td> </tr></tbody></table><h2>Conclusione</h2> <p>Infine, va notato che utilizzando il parser XML standard <i>msxml.dll</i> 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 <b>TPageProduser</b> e <b>TableProduser</b>... Ma questo articolo sottolinea solo l'ampiezza e l'applicabilità del modello DOM nella pratica.</p> <p>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.</p> <br> <br> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy loading=lazy>");</script> </div> </article> <div class="post-bottom"> <div class="post-share"> <script src="//yastatic.net/es5-shims/0.0.2/es5-shims.min.js"></script> <script src="//yastatic.net/share2/share.js"></script> <div class="ya-share2" data-services="vkontakte,facebook,odnoklassniki,moimir" data-counter=""></div> </div> </div> <div class='yarpp-related'> <div class="related-items"> <div class="headline">Non hai trovato risposta alla tua domanda? Guarda qui</div> <div class="items"> <div class="related-item"> <a class="related-item__title" href="https://appcube.ru/it/rashka-kvadratnyi-vatnik-rashka-kvadratnyi-vatnik-vatnik.html"><img src="/uploads/8be2f874cda9a8f8fde03204fe7476f6.jpg" width="120" height="120" alt="Giacca trapuntata Rashka-quadrata Giacca trapuntata fumetti" class="related-item__image" / loading=lazy loading=lazy>Giacca trapuntata Rashka-quadrata Giacca trapuntata fumetti</a> <div class="related-item__comments"><span></span></div> </div> <div class="related-item"> <a class="related-item__title" href="https://appcube.ru/it/sposoby-proverit-balans-i-trafik-na-bilain-sposoby-proverit-ostatok.html"><img src="/uploads/a6d4243b46a2b74554f0ba1bd9f6c548.jpg" width="120" height="120" alt="Modi per controllare il resto del traffico su Beeline Controllare il traffico sul modem Beeline" class="related-item__image" / loading=lazy loading=lazy>Modi per controllare il resto del traffico su Beeline Controllare il traffico sul modem Beeline</a> <div class="related-item__comments"><span></span></div> </div> <div class="related-item"> <a class="related-item__title" href="https://appcube.ru/it/tvich-vhod-sozdanie-translyacii-na-twitch-sozdanie-scen-i-istochnikov.html"><img src="/uploads/17c57b96b6e245fa09293c72940507f6.jpg" width="120" height="120" alt="Crea un flusso Twitch" class="related-item__image" / loading=lazy loading=lazy>Crea un flusso Twitch</a> <div class="related-item__comments"><span></span></div> </div> </div> </div> </div> <div style="text-align: center; margin-top: 15px; margin-bottom: 15px; " id="vanna-1965575812"><div class="adsense"><script type="text/javascript">ga_1();</script></div></div> </main> <aside class="sidebar"> <div class="advices" data-theme="vannapedia_v.3"> <div class="headline"></div> <div class="advices-content"> <img src="/uploads/8adac44ede4f78ec73043b381bb7e215.jpg" width="120" height="120" alt="Carambis Cleaner - un programma per migliorare le prestazioni del computer e correggere gli errori nei sistemi operativi Windows" class="advices__image" / loading=lazy loading=lazy> <div class="advices__title" data-id="3334"><a href="https://appcube.ru/it/carambis-cleaner---programma-dlya-povysheniya-bystrodeistviya-kompyutera-i.html">Carambis Cleaner - un programma per migliorare le prestazioni del computer e correggere gli errori nei sistemi operativi Windows</a></div> </div> </div> <div class="vk-widget" id="text-3"> <div class="textwidget"><script type="text/javascript" src="//vk.com/js/api/openapi.js?130"></script> <div id="vk_groups"></div> </div> </div> <div class="sidebar-questions"> <div class="headline">Nuovo</div> <ul> <li><a href="https://appcube.ru/it/kak-uznat-tarifnyi-plan-na-bilain-kombinaciya-kak-uznat-svoi-tarif.html" >Come scoprire la tua tariffa sul Beeline</a></li> <li><a href="https://appcube.ru/it/mac-os-dlya-nachinayushchih-obuchenie-rabote-na-kompyuterah-i-obuchenie-macbook-na-nashih.html" >Imparare MacBook con i nostri corsi renderà il lavoro con un computer un piacere Corsi MacBook</a></li> <li><a href="https://appcube.ru/it/kak-uznat-kakaya-versiya-windows-ustanovlena-na-vashem-kompyutere-kak.html" >Come determinare la versione di Windows sul tuo computer Scopri quale versione di Windows 8</a></li> <li><a href="https://appcube.ru/it/kak-sobrat-kompyuter-iz-komplektuyushchih-samostoyatelno-kak.html" >Come costruire da soli un buon computer esattamente per le tue esigenze</a></li> <li><a href="https://appcube.ru/it/kak-uznat-versiyu-windows-na-kompyutere-prostye-instrukcii-kak-uznat-versiyu-windows.html" >Come faccio a scoprire la versione di Windows sul mio computer?</a></li> <li><a href="https://appcube.ru/it/mozhno-li-zapisat-dvd-disk-bez-nero-zapis-filmov-i-muzyki-s-pomoshchyu.html" >Registrazione di filmati e musica con Nero</a></li> </ul> </div> <div class="section"> <div id="macire1" style="height:500px;width:240px;" align="center"></div> </div> <div class="section"> <div class="headline">Articoli popolari</div> <ul class="sidebar-posts"> <li><a href="https://appcube.ru/it/volodya-rzhavyi-nastoyashchee-imya-red21-kto-eto-takoi-lichnaya-zhizn-volodi.html"><img src="/uploads/54ac8272b35e8de0637a0b662e8249c7.jpg" width="80" height="80" alt="Volodya arrugginito vero nome" / loading=lazy loading=lazy>Volodya arrugginito vero nome</a></li> <li><a href="https://appcube.ru/it/komandnaya-stroka-vin-10-drevnii-sposob-cherez-katalog-ustanovlennyh-programm.html"><img src="/uploads/16085b5c17886710b9432abce1171b0b.jpg" width="80" height="80" alt="La via antica: attraverso la directory dei programmi installati" / loading=lazy loading=lazy>La via antica: attraverso la directory dei programmi installati</a></li> <li><a href="https://appcube.ru/it/dva-sposoba-kak-zashchitit-yacheiki-v-excel-ot-izmenenii-kak-zashchitit-yacheiku-ot.html"><img src="/uploads/cd73a75e80c9e508e3dbb94f1cf892dd.jpg" width="80" height="80" alt="Come proteggere una cella dalle modifiche in Excel Come nascondere una colonna in Excel e proteggere con password" / loading=lazy loading=lazy>Come proteggere una cella dalle modifiche in Excel Come nascondere una colonna in Excel e proteggere con password</a></li> </ul> </div> <div class="section"> <div class="headline">Novità sul sito</div> <ul class="sidebar-posts sidebar-photo"> <li><a href="https://appcube.ru/it/kak-skachat-muzyku-s-odnoklassnikov-luchshie-sposoby-programmy-dlya-skachivaniya.html">Programmi per scaricare musica dai compagni di classe Estensione OK Music per Google Chrome</a></li> <li><a href="https://appcube.ru/it/upravlenie-lichnym-kabinetom-bilain-podrobnaya-instrukciya.html">Contatti di supporto Beeline</a></li> <li><a href="https://appcube.ru/it/bilain-domashnii-internet-servis-kak-nastraivat-domashnii-internet.html">Come configurare Internet Beeline da casa: manuale utente dettagliato</a></li> <li><a href="https://appcube.ru/it/zakazat-detalizaciyu-bilain-na-elektronnuyu-pochtu-detalizaciya.html">Dettagliare le chiamate Beeline tramite il tuo account personale</a></li> <li><a href="https://appcube.ru/it/bilain-lichnyi-kabinet-vhodyashchie-i-ishodyashchie-zvonki-kak-zakazat-detalizaciyu.html">Come ordinare i dettagli delle chiamate Beeline per un certo periodo?</a></li> </ul> </div> </aside> </div> <footer class="footer"> <nav class="footer__nav"><ul><li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-1219"><a href="https://appcube.ru/it/">Nuovo</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6819"><a href="https://appcube.ru/it/luchshie-programmy-dlya-napisaniya-html-koda-html-reader-besplatnyi-html.html">Lettore HTML Editor HTML gratuito</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6818"><a href="https://appcube.ru/it/kak-rabotaet-yandeks-disk-na-iphone-kak-s-yandeks-diska-skachat-video-na.html">Come scaricare video da Yandex Disk su iPhone: un modo semplice</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6817"><a href="https://appcube.ru/it/licenzionnoe-soglashenie-ob-usloviyah-ispolzovaniya-programmnogo.html">Contratto di licenza per i termini di utilizzo del software Dr</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6815"><a href="https://appcube.ru/it/airyware-tuner---luchshii-tyuner-v-vashem-smartfone-airyware-tuner---luchshii-tyuner-v-vashem.html">Airyware Tuner - il miglior accordatore nel tuo smartphone Applicazione per accordare la chitarra sullo sfondo di Windows</a></li> </ul> </li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-1230"><a href="https://appcube.ru/it/">Popolare</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6812"><a href="https://appcube.ru/it/bilain-lichnyi-kabinet-skachat-na-maikrosoft-obzor-prilozheniya-moi-bilain.html">Recensione dell'applicazione "My Beeline" per Windows Phone</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6811"><a href="https://appcube.ru/it/best-ofis-freeware---besplatnaya-kompleksnaya-sistema-dlya-malogo-biznesa.html">Miglior pacchetto software Miglior software di contabilità 5</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6810"><a href="https://appcube.ru/it/antivirus-avg-64-bit-besplatnye-programmy-dlya-windows-skachat.html">Software gratuito per il download gratuito di Windows</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6809"><a href="https://appcube.ru/it/draiver-nvidia-dlya-8-1-uproshchennoi-besplatnye-programmy-dlya-windows-skachat.html">Software gratuito per il download gratuito di Windows</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6808"><a href="https://appcube.ru/it/besplatnye-programmy-dlya-windows-skachat-besplatno-besplatnye.html">Software gratuito per Windows download gratuito Scarica nvidia per Windows 8</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6807"><a href="https://appcube.ru/it/megafon-modem-draiver-windows-10-megafon-modem-installyaciya.html">Driver modem megafono windows 10</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6806"><a href="https://appcube.ru/it/megafon-upravlenie-modemom-windows-10-skachat-megafon-modem.html">Controllo modem megafono windows 10</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6805"><a href="https://appcube.ru/it/skachat-prilozhenie-kamera-na-russkom-besplatno-ekrannaya-kamera-ustanovka-veb.html">Fotocamera su schermo Installazione di una webcam su un computer Windows 10</a></li> </ul> </li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-1236"><a href="https://appcube.ru/it/">Consigliato</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6804"><a href="https://appcube.ru/it/draivery-dlya-kompyutera-draivery-dlya-kompyutera-skachat.html">Driver per computer Scarica tutti i driver per Windows 8</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6802"><a href="https://appcube.ru/it/kak-otkryt-mms-soobshchenie-na-kompyutere-kak-posmotret-mms-na.html">Come guardare gli MMS sul telefono: alcuni suggerimenti Come visualizzare un messaggio multimediale</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6801"><a href="https://appcube.ru/it/kak-vyzvat-skoruyu-s-mobilnika-kak-vyzvat-ekstrennye-sluzhby-kakaya.html">Come chiamare i servizi di emergenza</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6800"><a href="https://appcube.ru/it/skoraya-po-mobilnomu-bilain-kak-vyzvat-na-dom-vracha-skoruyu-ili.html">Come chiamare un medico, un'ambulanza o un pronto soccorso a casa</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6798"><a href="https://appcube.ru/it/oblako-dlya-peredachi-failov-oblachnoe-hranilishche-dannyh-kak-sozdat.html">Archiviazione dati cloud</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6794"><a href="https://appcube.ru/it/izmenit-pusk-na-vindovs-8.html">Cambierà l'avvio in Windows 8</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6791"><a href="https://appcube.ru/it/pochemu-vydaet-oshibku-pri-zapuske-kompyutera-nastroikaaivaemost.html">Software personalizzabile</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6790"><a href="https://appcube.ru/it/v-windows-8-vernut-knopku-pusk.html">Windows 8 restituirà il pulsante di avvio</a></li> </ul> </li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-6898"><a href="https://appcube.ru/it/">Sul sito</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6900"><a href="">Sul sito</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6901"><a href="">Pubblicità sul sito web</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6902"><a href="">Contatti</a></li> </ul> </li> </ul></nav> <div class="footer-bottom"> <div class="footer-left"> <div class="foot__logo"> <div class="footer__logo-sitename">appcube.ru <span>ru</span></div> </div> <style> .foot__logo { min-height: 35px; margin: 0 0 11px -79px; padding: 9px 0 0 79px; text-decoration: none; } </style> <p>© 2021 Tutti i diritti riservati</p> <p>Sito web sui computer</p> <ul class="footer-bottom__nav"> <li><a href="" >Pubblicità sul progetto</a></li> </ul> </div> <div class="footer-buttons"> </div> <ul class="footer__soc"> <li><a href="http://vk.com/" target="_blank" class="vk">In contatto con</a></li> <li>compagne di classe</li> <li><a href="http://www.facebook.com/" target="_blank" class="fb">Facebook</a></li> <li><a href="https://twitter.com/" target="_blank" class="twi">Twitter</a></li> </ul> <div class="footer-right"> <div class="footer__note"></div> <div class="footer__counters" id="text-2"> <div class="textwidget"></div> </div> </div> </div> </footer> </div> </div> <link rel='stylesheet' id='wp-lightbox-bank.css-css' href='/wp-content/plugins/wp-lightbox-bank/assets/css/wp-lightbox-bank.css?ver=4.8.3' type='text/css' media='all' /> <script type='text/javascript' src='https://appcube.ru/wp-content/themes/vannapedia_v.3/js/scripts.js'></script> <script type='text/javascript' src='/wp-includes/js/comment-reply.min.js?ver=4.8.3'></script> <script type='text/javascript' src='/assets/scripts1.js'></script> <script type='text/javascript'> /* <![CDATA[ */ var tocplus = { "smooth_scroll":"1"} ; /* ]]> */ </script> <script type='text/javascript' src='https://appcube.ru/wp-content/plugins/table-of-contents-plus/front.min.js?ver=1509'></script> <script type='text/javascript'> var q2w3_sidebar_options = new Array(); q2w3_sidebar_options[0] = { "sidebar" : "sidebar-fixed", "margin_top" : 10, "margin_bottom" : 0, "stop_id" : "respond", "screen_max_width" : 0, "screen_max_height" : 0, "width_inherit" : false, "refresh_interval" : 1500, "window_load_hook" : false, "disable_mo_api" : false, "widgets" : ['text-4'] } ; </script> <script type='text/javascript' src='https://appcube.ru/wp-content/plugins/q2w3-fixed-widget/js/q2w3-fixed-widget.min.js?ver=5.0.4'></script> <script type='text/javascript' src='/wp-includes/js/wp-embed.min.js?ver=4.8.3'></script> <script type='text/javascript' src='https://appcube.ru/wp-content/plugins/wp-lightbox-bank/assets/js/wp-lightbox-bank.js?ver=4.8.3'></script> <script type='text/javascript' src='https://appcube.ru/wp-content/plugins/akismet/_inc/form.js?ver=4.0'></script> </body> </html>