Računalniki Windows internet

Kako ustvariti datoteko xml delphi. Internetni potovalni vodnik – vsa zabava na spletu. Nekaj ​​besed o organizaciji pretoka dokumentov

Dobrodošli! Ta blog govori o internetu in računalnikih oziroma jim je bil posvečen.

Verjetno je takoj jasno, da se na spletnem mestu že vrsto let ni pojavil noben nov članek. Ja, to je usoda večine blogov. Ta projekt je bil nekoč ambiciozen podvig in avtor, tako kot mnogi drugi, ki so takrat pisali, je imel ambiciozne načrte, da postane eden najboljših ruskih blogerjev. No, če pogledate zdaj, potem je od tistih blogov, ki so nastali sočasno z mojimi, večina že izginila v večnost. In preprosto nisem imel dovolj časa za blog. Torej da, se ne posodablja več. Čeprav smo nekoč s to stranjo zmagali na tekmovanju "Blog Runeta 2011".

Imel sem celo idejo, da bi vse to izbrisal, potem pa sem pregledal stare materiale in ugotovil, da so bralcem še vedno uporabni. Da, nekateri članki so zastareli (če imam dovolj moči, bodo prejeli ustrezne opombe), vendar je spletno mesto, na primer, lahko koristno za začetnike - tukaj lahko preberete o osnovnih konceptov Internet, naučite se konfigurirati internet, Windows ali se celo odločite za prehod na Linux. Zato si oglejte rubrike in izberite tisto, ki vam ustreza.

In vendar upam, da je to več kot le blog, ampak pravi vodnik po internetu. Stran si lahko ogledate v načinu imenika, kjer so vsi razpoložljivi članki strukturirani po kategorijah. In kdo ve, morda se bodo tu nekega dne začeli pojavljati novi kakovostni članki.

Sander

Picodi.ru je diskontni portal International Coupons, poljskega strokovnjaka za varčevanje in poceni nakupovanje. Poljaki veljajo za eno najbolj ekonomičnih narodov na svetu, zato ni presenetljivo, da je tovrstni projekt zrastel iz poljskega startupa kodyrabatowe.pl. Kako je lahko ta portal koristen navadnemu uporabniku interneta v Rusiji?

Sodobni telefoni Android so več kot telefoni. Navadiš se tipkanja nameščenih programov, v zgodovino vaših klicev in tekstovna sporočila, zbirke fotografij in še več. Toda čas teče in naprava, ki vam ustreza, se začne upočasnjevati, motiti ali preprosto izgublja predstavljiv videz zaradi čipov na ohišju ali prask na zaslonu. Postavlja se vprašanje izbire novega telefona in menjave android telefon... In če zdaj zaobidemo vprašanje izbire, potem se "preselimo" v nov telefon ostaja resen problem - absolutno ne želite začeti vseh podatkov iz nič. O tem bomo danes govorili.

Večina bralcev tega bloga se najverjetneje še nikoli ni srečala s sistemi za nadzor različic in jih v bližnji prihodnosti ne bo naletela. Škoda. Ta izjemno priročen izum programerji pogosto uporabljajo, a po mojem mnenju bi lahko bil zelo koristen za tiste, ki aktivno delajo z besedili. Toda verjetno zdaj ni niti enega sistema za nadzor različic, ki bi ga bilo enostavno začeti uporabljati za "pisarniško" ( Microsoft Office) delo. Kljub temu menim, da je material, predstavljen v članku, lahko zanimiv za vse bralce.

Če ste razmišljali o tem, kako gledati filme v omrežju s televizorja in iti v splet, je ta članek za vas. Ne, vem, da nekateri televizorji že imajo funkcijo Smart TV, vendar še nikoli nisem videl, da bi pravilno delovala. Očitno je zato nedavno korporacija Google pokazala popolnoma osupljivo napravo, ki je takoj postala senzacija. Govorimo o Chromecast media streamerju (Chromecast), naprednejši in cenovno dostopnejši različici lanskega katastrofalnega predvajalnika Nexus Q.

Dongle Chromecast, ki ni večji od 2 palca, se priključi v vrata HDMI TV in vam omogoča uživanje v gledanju pretočnih spletnih vsebin. Za upravljanje streamerja lahko uporabite katero koli napravo (tablični računalnik, osebni računalnik, pametni telefon), ki temelji na operacijski platformi iOS, Windows, Android ali Mac OS.

Ta članek je posvečen napravi sistemskega pomnilnika android, težavam, ki se lahko pojavijo zaradi njegovega pomanjkanja in kako jih rešiti. Ne tako dolgo nazaj sem se tudi sam soočil z dejstvom, da je moj Android telefon začel redno oddajati sporočila o nezadostnem pomnilniku, ko poskušam namestiti aplikacijo. Kar je bilo zame zelo čudno, glede na to, da bi po opisu na trgu moralo biti okoli 16 GB, pa sem tudi ta volumen povečal z dodatno pomnilniško kartico. Vendar pa je prišlo do težave in sem moral veliko popravljati, preden sem našel prava odločitev ki ne zahteva korenskega dostopa ali popolne tovarniške obnovitve telefona.

XML se vse pogosteje uporablja za shranjevanje informacij in njihovo izmenjavo med aplikacijami in spletnimi mesti. Številne aplikacije uporabljajo ta jezik kot osnovni jezik za shranjevanje podatkov, druge pa za izvoz in uvoz podatkov XML. Zato je čas, da razvijalci začnejo razmišljati o tem, kako lahko podatke XML uporabijo v svojih aplikacijah.

V tem članku si bomo ogledali objektni model dokumenta XML (DOM) in Microsoftovo implementacijo XML DOM.

XML DOM je objektni model, ki razvijalcu nudi predmete za nalaganje in obdelavo datotek XML. Objektni model je sestavljen iz naslednjih osnovnih objektov: XMLDOMDocument, XMLDOMNodeList, XMLDOMNode, XMLDOMNamedNodeMap in XMLDOMParseError. Vsak od teh objektov (razen XMLDOMParseError) vsebuje lastnosti in metode, ki vam omogočajo pridobivanje informacij o objektu, manipulacijo vrednosti in strukture predmeta ter krmarjenje po strukturi dokumenta XML.

Oglejmo si glavne objekte XML DOM in pokažimo nekaj primerov njihove uporabe v Borland Delphi.

Uporaba XML DOM v Borland Delphi

Če želite uporabljati Microsoft XML DOM v aplikacijah Delphi, morate s projektom povezati ustrezno knjižnico tipov. Za to izvedemo ukaz Project | Import Type Library in v pogovornem oknu Import Type Library izberite knjižnico Microsoft XML različice 2.0 (version 2.0), ki se običajno nahaja v datoteki Windows \ System \ MSXML.DLL

Po kliku na gumb Ustvari enoto se ustvari vmesniški modul MSXML_TLB, ki nam bo omogočil uporabo objektov XML DOM: DOMDocument, XMLDocument, XMLHTTPRequest in številne druge, implementirane v knjižnici MSXML.DLL. Sklic na modul MSXML_TLB mora biti na seznamu Uporabi.

Naprava XML DOM

Objektni model dokumenta predstavlja dokument XML v drevesni strukturi vej. API-ji XML DOM omogočajo aplikacijam, da se premikajo po drevesu dokumenta in manipulirajo z njegovimi vejami. Vsaka veja ima lahko določen tip (DOMNodeType), po katerem se določijo nadrejena in podrejena veja. Večina dokumentov XML vsebuje veje elementa tipa, atributa in besedila. Atributi so posebna vrsta veje in niso podrejene veje. Za manipuliranje z atributi se uporabljajo posebne metode, ki jih nudijo objekti XML DOM.

Poleg implementacije vmesnikov, ki jih priporoča W3C (World Wide Web Consortium), vsebuje Microsoft XML DOM metode, ki podpirajo XSL, vzorce XSL, imenske prostore in podatkovne tipe. Metoda SelectNodes vam na primer omogoča uporabo sintakse vzorca XSL za iskanje vej v določenem kontekstu, metoda TransformNode pa podpira uporabo XSL za izvajanje transformacij.

Preizkusite dokument XML

Kot primer dokumenta XML vzemimo imenik glasbenega CD-ROM-a, ki ima naslednjo strukturo:

Empire burleska Bob dylan ZDA Kolumbija 10.90 1985 Skrij svoje srce Bonnie Tylor Združeno kraljestvo CBS Records 9.90 1988 ... Odpni mi srce Joe Cocker ZDA EMI 8.20 1987

Zdaj smo pripravljeni, da začnemo gledati objektni model XML DOM, začenši z objektom XMLDOMDocument.

Dokument XML – predmet XMLDOMDocument

Delo z dokumentom XML se začne z nalaganjem. Za to uporabljamo metodo Load, ki ima samo en parameter, ki določa URL naloženega dokumenta. Pri nalaganju datotek z lokalnega diska je podano samo polno ime datoteke (protokol datoteke: /// v tem primeru lahko izpustite). Če je dokument XML shranjen kot niz, za nalaganje dokumenta uporabite metodo LoadXML.

Lastnost Async se uporablja za nadzor načina nalaganja dokumenta (sinhrono ali asinhrono). Privzeto je ta lastnost nastavljena na True, kar pomeni, da se dokument naloži asinhrono in da se nadzor vrne v aplikacijo, preden se dokument v celoti naloži. V nasprotnem primeru se dokument naloži sinhrono, nato pa morate preveriti vrednost lastnosti ReadyState, da ugotovite, ali se je dokument naložil ali ne. Ustvarite lahko tudi upravljalnik za dogodek OnReadyStateChange, ki bo prevzel nadzor, ko se spremeni vrednost lastnosti ReadyState.

V nadaljevanju je prikazano, kako naložiti dokument XML z metodo Load:

Uporablja ... MSXML_TLB ... postopek TForm1.Button1Click (Pošiljatelj: TObject); var XMLDoc: IXMLDOMDocument; začeti XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = False; XMLDoc.Load („C: \ DATA \ DATA.xml“); // // Tukaj je koda, ki manipulira z dokumentom XML in njegovimi vejami // XMLDoc: = Nil; konec;

Ko je dokument naložen, lahko dostopamo do njegovih lastnosti. Torej bo lastnost NodeName vsebovala vrednost #document, lastnost NodeTypeString bo vsebovala vrednost dokumenta, lastnost URL pa bo vsebovala datoteko: /// C: /DATA/DATA.xml vrednost.

Obravnava napak

Posebno zanimive so lastnosti, povezane z obdelavo dokumentov ob nalaganju. Lastnost ParseError na primer vrne objekt XMLDOMParseError, ki vsebuje informacije o napaki, ki je nastala med obdelavo dokumenta.

Če želite napisati obravnavo napak, lahko dodate naslednjo kodo:

Var XMLError: IXMLDOMParseError; ... XMLDoc.Load (‘C: \ DATA \ DATA.xml’); XMLError: = XMLDoc.ParseError; Če XMLError.ErrorCode<>0 Nato // // Tukaj obravnavamo napako // Drugače Memo1.Lines.Add (XMLDoc.XML); ... XMLDoc: = Nič;

Če želite izvedeti, katere informacije se vrnejo v primeru napake, spremenite naslednji vnos v imeniku:

Empire burleska Bob dylan ZDA Kolumbija 10.90 1985

odstranitev zapirnega elementa v drugi vrstici:</p><p> <CD> <TITLE>Empire burleska <ARTIST>Bob dylan</ARTIST> <COUNTRY>ZDA</COUNTRY> <COMPANY>Kolumbija</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> </p><p>Zdaj pa napišemo kodo, ki vrne vrednosti lastnosti predmeta XMLDOMParseError:</p><p>XMLError: = XMLDoc.ParseError; Če XMLError.ErrorCode<>0 Nato se z XMLError Memo1.Lines začne dodajati ('Datoteka:' + URL); Dodaj ('Koda:' + IntToStr (Koda napake)); Dodaj („Napaka:“ + Razlog); Dodaj ('Besedilo:' + SrcText); Dodaj („Line:“ + IntToStr (Line)); Dodaj ('Položaj:' + IntToStr (LinePos)); konec Drugače Memo1.Lines.Add (XMLDoc.XML); Konec;</p><p>in izvedite našo aplikacijo. Kot rezultat dobimo naslednje informacije o napaki.</p> <p>Kot lahko vidite iz zgornjega primera, so informacije, ki jih vrne objekt XMLDOMParseError, povsem dovolj za lokalizacijo napake in razumevanje vzroka njenega pojava.</p> <p>Zdaj bomo obnovili zapiralni element <TITLE>v našem dokumentu in nadaljujte z razpravo o XML DOM.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Dostop do drevesa dokumentov</h2> <p>Za dostop do drevesa dokumenta lahko bodisi pridobite korenski element in nato ponovite njegove podrejene veje ali poiščete določeno vejo. V prvem primeru dobimo korenski element preko lastnosti DocumentElement, ki vrne objekt tipa XMLDOMNode. Za pridobitev vsebine vsakega podrejenega elementa uporabite lastnost DocumentElement:</p><p>Vozlišče Var: IXMLDOMNode; Koren: element IXMLDOME; I: Celo število; ... Koren: = XMLDoc.DocumentElement; Za I: = 0 do Root.ChildNodes.Length-1 do začetnega vozlišča: = Root.ChildNodes.Item [I]; Memo1.Lines.Add (vozlišče.Besedilo); Konec;</p><p>Za naš dokument XML dobimo naslednje besedilo.</p> <p>Če nas zanima določena veja ali veja pod prvo podrejeno vejo, lahko uporabimo bodisi metodo NodeFromID bodisi metodo GetElementByTagName predmeta XMLDOMDocument.</p> <p>Metoda NodeFromID zahteva edinstven identifikator, kot je opredeljen v shemi XML ali definiciji tipa dokumenta (DTD), in vrne vejo s tem identifikatorjem.</p> <p>Metoda GetElementByTagName zahteva niz s posebnim elementom (oznako) in vrne vse veje s tem elementom. Tukaj je opisano, kako s to metodo poiščete vse izvajalce v našem imeniku CD-ROM:</p><p>Vozlišča: IXMLDOMNodeList; Vozlišče: IXMLDOMNode; ... Vozlišča: = XMLDoc.GetElementsByTagName (‘ARTIST’); Za I: = 0 do Vozlišča. Dolžina-1 do Začetnega vozlišča: = Vozlišča. Postavka [I]; Memo1.Lines.Add (vozlišče.Besedilo); Konec;</p><p>Za naš dokument XML bomo dobili naslednje besedilo</p> <p>Upoštevajte, da metoda SelectNodes objekta XMLDOMNode zagotavlja bolj prilagodljiv način za dostop do vej dokumenta. Toda več o tem spodaj.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Veja dokumenta - objekt XMLDOMNode</h2> <p>Objekt XMLDOMNode predstavlja vejo dokumenta. Ta predmet smo že naleteli, ko smo dobili korenski element dokumenta:</p><p>Koren: = XMLDoc.DocumentElement;</p><p>Za pridobitev informacij o veji dokumenta XML lahko uporabite lastnosti predmeta XMLDOMNode (tabela 1).</p> <p>Za dostop do podatkov, shranjenih v veji, je običajno uporabiti lastnost NodeValue (na voljo za atribute, besedilne veje, komentarje, navodila za obdelavo in razdelke CDATA) ali lastnost Text, ki vrne besedilno vsebino veje, ali lastnost NodeTypedValue. Slednje pa se lahko uporablja samo za podružnice s tipkanimi artikli.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>Krmarjenje po drevesu dokumenta</h3> <p>Objekt XMLDOMNode ponuja številne načine za krmarjenje po drevesu dokumenta. Na primer, za dostop do nadrejene veje uporabite lastnost ParentNode (tip XMLDOMNode), dostopajte do podrejenih vej prek lastnosti ChildNodes (tip XMLDOMNodeList), FirstChild in LastChild (tip XMLDOMNode) itd. Lastnost OwnerDocument vrne objekt XMLDOMDocument, ki identificira sam dokument XML. Zgoraj navedene lastnosti olajšajo krmarjenje po drevesu dokumenta.</p> <p>Zdaj pa pojdimo skozi vse veje dokumenta XML:</p><p>Koren: = XMLDoc.DocumentElement; Za I: = 0 do Root.ChildNodes.Length-1 do začetnega vozlišča: = Root.ChildNodes.Item [I]; Če Node.HasChildNodes, potem GetChilds (Vozlišče, 0); Konec;</p><p>Kot je navedeno zgoraj, SelectNodes objekta XMLDOMNode zagotavlja bolj prilagodljiv način za dostop do vej dokumenta. Poleg tega obstaja metoda SelectSingleNode, ki vrne samo prvo vejo dokumenta. Obe metodi vam omogočata, da definirate predloge XSL za iskanje podružnic.</p> <p>Oglejmo si postopek uporabe metode SelectNodes za pridobivanje vseh vej, ki imajo vejo CD in podvejo PRICE:</p><p>Koren: = XMLDoc.DocumentElement; Vozlišča: = Root.SelectNodes (‘CD / PRICE’);</p><p>Vse podveje PRICE podružnice CD bodo umeščene v zbirko Vozlišča. K razpravi o predlogah XSL se bomo vrnili nekoliko kasneje.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>Manipuliranje podrejenih vej</h3> <p>Za manipuliranje podrejenih vej lahko uporabimo metode objekta XMLDOMNode (tabela 2).</p> <p>Če želite v celoti izbrisati zapis o prvem disku, morate zagnati naslednjo kodo:</p><p>Var XMLDoc: IXMLDOMDocument; Koren: IXMLDOMNode; Vozlišče: IXMLDOMNode; XMLDoc: = CoDOMDocument.Ustvari; XMLDoc.Async: = False; XMLDoc.Load („C: \ DATA \ DATA.xml“); // Pridobite korenski element Root: = XMLDoc.DocumentElement; Vozlišče: = koren; // Odstrani prvo podrejeno vejo Node.RemoveChild (Node.FirstChild);</p><p>Upoštevajte, da v tem primeru izbrišemo prvo podrejeno vejo. Kako odstraniti prvi element prve podrejene veje je prikazano spodaj:</p><p>Var XMLDoc: IXMLDOMDocument; Koren: IXMLDOMNode; Vozlišče: IXMLDOMNode; XMLDoc: = CoDOMDocument.Ustvari; XMLDoc.Async: = False; XMLDoc.Load („C: \ DATA \ DATA.xml“); // Pridobite korenski element Root: = XMLDoc.DocumentElement; // in prva podrejena veja Vozlišče: = Root.FirstChild; // Odstrani prvo podrejeno vejo Node.RemoveChild (Node.FirstChild);</p><p>V zgornjem primeru nismo izbrisali prve veje <CD>…</CD> in prvi element veje je <TITLE>….

Zdaj pa dodajmo novo vejo. Spodaj je koda, ki prikazuje, kako dodati nov vnos glasbenega CD-ROM-a:

Var NewNode: IXMLDOMNode; Otrok: IXMLDOMNode; ... // Ustvari novo vejo - Novo vozlišče: = XMLDoc.CreateNode (1, ‘CD’, ‘’); // Dodaj element Otrok: = XMLDoc.CreateNode (1, 'TITLE', ''); // Dodajanje elementa NewNode.AppendChild (Child); // In nastavi njeno vrednost Child.Text: = 'Pink Floyd'; // Dodaj element <ARTIST>Podrejeni: = XMLDoc.CreateNode (1, 'IZVOZNIK', ''); // Dodajanje elementa NewNode.AppendChild (Child); // In nastavi njeno vrednost Child.Text: = 'Division Bell'; // Dodaj element <COUNTRY>Otrok: = XMLDoc.CreateNode (1, 'DRŽAVA', ''); // Dodajanje elementa NewNode.AppendChild (Child); // In nastavi njeno vrednost Child.Text: = 'UK'; // Dodaj element <COMPANY>Otrok: = XMLDoc.CreateNode (1, 'COMPANY', ''); // Dodajanje elementa NewNode.AppendChild (Child); // In nastavi njeno vrednost Child.Text: = 'EMI Records Ltd.'; // Dodaj element <PRICE>Otrok: = XMLDoc.CreateNode (1, 'CENA', ''); // Dodajanje elementa NewNode.AppendChild (Child); // In nastavite njegovo vrednost Child.Text: = '11 .99 "; // Dodajte element <YEAR>Otrok: = XMLDoc.CreateNode (1, 'LETO', ''); // Dodajanje elementa NewNode.AppendChild (Child); // In nastavi njeno vrednost Child.Text: = '1994'; // In dodamo vejo Root.AppendChild (NewNode); ...</p><p>Zgornja koda prikazuje naslednje zaporedje korakov za dodajanje nove veje:</p> <ul><li>Ustvarjanje nove veje z metodo CreateNode: <ul><li>ustvarjanje elementa z metodo CreateNode;</li> <li>dodajanje elementa v vejo z uporabo metode AppendChild;</li> <li>nastavitev vrednosti elementa prek lastnosti Text;</li> <li>… Ponovite za vse elemente.</li> </ul></li> <li>Dodajanje nove veje v dokument z metodo AppendChild.</li> </ul><p>Spomnimo se, da metoda AppendChild doda vejo na konec drevesa. Če želite dodati vejo na določeno mesto v drevesu, morate uporabiti metodo InsertBefore.</p> <h2>Nabor vej - objekt XMLDOMNodeList</h2> <p>Objekt XMLNodeList vsebuje seznam vej, ki jih je mogoče zgraditi z metodama SelectNodes ali GetElementsByTagName in pridobiti tudi iz lastnosti ChildNodes.</p> <p>O uporabi tega predmeta smo že razpravljali v primeru v razdelku "Krmarjenje po drevesu dokumenta". Tukaj bomo podali nekaj teoretičnih komentarjev.</p> <p>Število vej na seznamu je mogoče dobiti kot vrednost lastnosti Length. Veje so indeksirane od 0 do dolžine-1, vsaka posamezna veja pa je dostopna prek ustrezne indeksirane postavke v matriki Item.</p> <p>Krmarjenje po seznamu vej je mogoče izvesti tudi z metodo NextNode, ki vrne naslednjo vejo na seznamu, ali Nil, če je trenutna veja zadnja. Če se želite vrniti na vrh seznama, pokličite metodo Reset.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Ustvarite in shranite dokumente</h2> <p>Torej smo obravnavali, kako lahko dodate veje in elemente obstoječim dokumentom XML. Zdaj pa ustvarimo dokument XML sproti. Najprej ne pozabite, da se dokument lahko naloži ne samo iz URL-ja, ampak tudi iz običajnega niza. Tukaj je opisano, kako ustvarite korenski element, ki ga lahko nato uporabite za dinamično gradnjo preostalih elementov (kar smo že obravnavali v razdelku Manipuliranje podrejenih vej):</p><p>Var XMLDoc: IXMLDOMDocument; Koren: IXMLDOMNode; Vozlišče: IXMLDOMNode; S: WideString; ... S: = ' <CATALOG></CATALOG>'; XMLDoc: = CoDOMDocument.Ustvari; XMLDoc.Async: = False; XMLDoc.LoadXML (S); Koren: = XMLDoc.DocumentElement; Vozlišče: = XMLDoc.CreateNode (1, ‘CD’, ‘’); Root.AppendChild (vozlišče); Memo1.Lines.Add (XMLDoc.XML); ... XMLDoc: = Nič;</p><p>Ko zgradite dokument XML, ga shranite v datoteko z metodo Save. Na primer:</p> <p>XMLDoc.Save ('C: \ DATA \ NEWCD.XML');</p> <p>Poleg shranjevanja v datoteko vam metoda Save omogoča, da shranite dokument XML v nov objekt XMLDOMDocument. V tem primeru je dokument v celoti obdelan in posledično se preveri njegova struktura in sintaksa. Takole lahko shranite dokument v drug predmet:</p><p>Postopek TForm1.Button2Click (Pošiljatelj: TObject); var XMLDoc2: IXMLDOMDocument; začeti XMLDoc2: = CoDOMDocument.Create; XMLDoc.Shrani (XMLDoc2); Memo2.Lines.Add (XMLDoc2.XML); ... XMLDoc2: = Nič; konec;</p><p>Za zaključek vam metoda Save omogoča tudi shranjevanje dokumenta XML v druge objekte COM, ki podpirajo vmesnike IStream, IPersistStream ali IPersistStreamInit.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Uporaba predlog XSL</h2> <p>Ko smo razpravljali o metodi SelectNodes predmeta XMLDOMNode, smo omenili, da zagotavlja bolj prilagodljiv način za dostop do vej dokumenta. Prilagodljivost je, da lahko kot merilo za izbiro vej podate predlogo XSL. Takšne predloge zagotavljajo močan mehanizem za iskanje informacij v dokumentih XML. Če želite na primer dobiti seznam vseh naslovov glasbenih CD-ROM-ov v našem imeniku, lahko zaženete naslednjo poizvedbo:</p><p>Če želite izvedeti, kateri diski izvajalcev so izdani v ZDA, je zahteva oblikovana na naslednji način:</p><p>Vozlišča: = Root.SelectNodes (‘CD / IZVAJALEC’);</p><p>Takole najdete prvi pogon v imeniku:</p><p>Vozlišča: = Root.SelectNodes (‘CD / TITLE’);</p><p>In nazadnje:</p><p>Vozlišča: = Root.SelectNodes (‘CD / TITLE’);</p><p>Če želite poiskati diske Boba Dylana, lahko zaženete naslednjo poizvedbo:</p><p>Vozlišča: = Root.SelectNodes (‘CD [$ any $ ARTIST =” Bob Dylan ”] / TITLE’);</p><p>in da dobimo seznam diskov, izdelanih po letu 1985, zaženemo naslednjo poizvedbo:</p><p>Vozlišča: = Root.SelectNodes (‘CD / TITLE’);</p><p>Podrobnejša razprava o sintaksi XSL zahteva ločeno objavo. Da zaintrigiram bralce in spodbudim nadaljnje raziskave, bom navedel le en majhen primer možne uporabe XSL. Recimo, da moramo naš katalog pretvoriti v običajno tabelo HTML. Z uporabo tradicionalnih metod moramo ponoviti vse veje drevesa in za vsak prejeti element oblikovati ustrezne oznake <TD>…</TD>.</p> <p>Z uporabo XSL preprosto ustvarimo predlogo (ali slogovno tabelo), ki določa, kaj in kako preoblikovati. Nato to predlogo prekrijemo na naš katalog – in končali ste: imamo besedilo predloge XSL, ki pretvori katalog v tabelo (listing 2).</p> <p>Koda za prekrivanje predloge XSL v našem imeniku izgleda takole:</p><p>Postopek TForm1.Button2Click (Pošiljatelj: TObject); var XSLDoc: IXMLDOMDocument; začeti XSLDoc: = CoDOMDocument.Create; XSLDoc.Load („C: \ DATA \ DATA.xsl“); Memo2.Text: = XMLDoc.TransformNode (XSLDoc); XSLDoc: = nič; konec;</p><p>Ob zaključku naše razprave o XSL je treba povedati, da se ta jezik trenutno aktivno uporablja za pretvorbo med različnimi dokumenti XML, pa tudi za oblikovanje dokumentov.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Zaključek</h2> <p>Iz očitnih razlogov je nemogoče zajeti vse predmete Microsoft XML DOM in navesti primere njihove uporabe v enem članku. Tukaj smo se pravkar dotaknili osnovnih vprašanj uporabe XML DOM v aplikacijah. Tabela 3 prikazuje vse predmete, implementirane v Microsoft XML DOM.</p> <p>Computer Press 12 "2000</p> <p>Za mnoge programerje Delphi je shranjevanje nastavitev povezano z uporabo <i>INI</i> datoteke v svojih programih. Uporabi te metode pri bolj ali manj resnih projektih se je treba izogibati, saj omejuje fleksibilnost, kar onemogoča nadaljnjo širitev programa. Povedati je treba, da je ta pristop precej priljubljen zaradi enostavne uporabe in prisotnosti vgrajenih orodij v razvojnem okolju. <br><br>Vendar strukturirano <i>XML</i> datoteke. Njihova prednost je, da število parametrov morda ni določeno. Da bi to bolje razumeli, si oglejte poseben primer.</p><p>V programu USearch se ob kliku na vnos prikaže kontekstni meni, v katerem je prikazan seznam elementov. Ti elementi so ukazi, ki se nato naložijo iz nastavitvene datoteke. V primeru, da so bile nastavitve shranjene v <i>INI</i> datoteko, potem bi lahko program shranil in naložil določeno število ukazov, na primer 10 ali 50. Takoj, ko bo zahtevana večja vrednost, boste morali kodo ponovno napisati in jo ustrezno prevesti.</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>Uporaba pristopa z uporabo <i>XML</i> datoteke, bomo lahko dinamično naložili vse parametre razdelka. Poleg tega bo konfiguracijska datoteka postala bolj elegantna, brez odvečnega številčenja parametrov. Vendar pa standardna orodja za delo z <i>XML</i> Delphi ima veliko pomanjkljivosti, zato priporočam uporabo standardne knjižnice <b>MSXML</b>... Običajno je privzeto vključen v operacijske sisteme družine 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>Povezati <b>MSXML</b>, moramo ustvariti vmesniško datoteko s seznamom vseh funkcij, tako da jo uvozimo iz strežnika COM. O tem, kako uvoziti vmesnik, je bilo napisanih veliko podrobnih člankov, vendar predlagam, da prenesete datoteko <b>MSXML2_TLB.PAS</b> pripravljeno za uporabo. Ko je datoteka prenesena, jo postavite poleg svojega projekta ali jo spustite v mapo lib okolja Delphi. Tako bodo vsi ustvarjeni programi lahko uporabljali modul <b>MSXML</b>, morate samo dodati vrstico MSXML2_TLB v uses.</p><p>Za jasnost si oglejte naslednji primer uporabe te knjižnice:</p><p>Postopek LoadData; var XMLDoc: DOMDocument; Koren: element IXMLDOME; začeti XMLDoc: = CoDOMDocument.Create; XMLDoc.Load ("settins.xml"); Koren: = XMLDoc.DocumentElement; ShowMessage (Root.SelectSingleNode ("velikost / širina"). Besedilo); Koren: = nič; XMLDoc: = nič; konec;</p><p>Najprej se ustvari primerek razreda DOMDocument, nato pa se vsebina datoteke settings.xml naloži v pomnilnik. Ker po standardu kateri koli <i>XML</i> datoteka mora vsebovati korensko oznako (v tem primeru <i>konfigur</i>), potem ga moramo dobiti s funkcijo <i>DocumentElement</i>... Nato se vsebina prikaže med oznakami. <width></width>, ki so med oznakami <size></size>... Tako bo naša metoda iz datoteke settings.xml prikazala besedilo v MessageBox <i>"100 slikovnih pik"</i>.</p><p> <?xml version="1.0" encoding="utf-8"?> <config> <size> <height>500 slikovnih pik</height> <width>100 slikovnih pik</width> </size> </config> </p><p>Tukaj je uporabljena metoda SelectSingleNode, ki vzame niz kot parameter</p> <p>NAROČI REŠITEV PROBLEMA NA DELPHI <br>Delphi je drugi najpomembnejši programski jezik, s katerim se učenci najpogosteje seznanijo v učnem procesu. To je začetek učenja objektno usmerjenega programiranja. Kot študent sem prišel do zaključka, da ni lažjega načina za učenje jezika kot v njem napisati kalkulator. Tudi če implementirate osnovno funkcijo za seštevanje dveh številk, bo to osvetlilo to.</p> <p>CodeGaear, Delphi 7, Lazarus so različni prevajalniki, programi, ki bodo kodo, ki jo napišete, prenesli v stroj in jo pretvorili v enice in enice. To so vsi programi za ustvarjanje programov, ne ločeni programski jeziki. Ti prevajalniki uporabljajo programski jezik Object Pascal, ki je osnova jezika Delphi, ki je po sintaksi podoben običajnemu Pascalu, vendar se funkcionalno bistveno razlikuje. <br></p> <h2>Kakšna je sintaksa programskega jezika?</h2> <p>To je format za pisanje različnih operaterjev. Na primer, Pascalova zanka "for" ima naslednjo obliko: "for n: = 1 do k do" in tako naprej.</p><p>V programskem jeziku C ++ je ista zanka napisana nekoliko drugače: za (n = 1; n Napišemo kalkulator</p><p>Tako boste razumeli, kako objekti delujejo s programsko kodo, kaj so "spremenljivke" in kako delujejo matematične funkcije. Vsako programiranje bo tako ali tako izračun. Igra je tudi program, ki nenehno nekaj izračuna, dela s številkami in številskimi funkcijami. Programiranje je neločljivo od matematike.</p> <p>Za pisanje uporabimo razvojno okolje Lazarus. Njegova funkcionalnost sicer ni tako bogata kot recimo CodeGear, je pa prosto dostopna in namenjena usposabljanju.</p><p>Ko odpremo razvojno okolje, vidimo obrazec in orodje. Tukaj je obrazec.</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>Tukaj je škatla z orodji.</p><p>Prva stvar, ki jo bomo naredili, je, da dodamo tri elemente, ki jih potrebujemo za implementacijo funkcije za seštevanje dveh števil. Potrebujemo: "Tedit" v količini treh kosov in "TButton". Na spodnji sliki so prikazani na plošči s puščicami. Enkrat kliknemo nanje, nato enkrat na obrazec in se na njem prikažejo.</p><p>To so besedilna polja za vnos in navaden gumb. Na te elemente naletite s skoraj katerim koli programom Windows. Poglej.</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>Zdaj pa počistimo te oznake. Kliknite zavihek »Pogled«. In kliknite na element "Inšpektor objektov. Pojavilo se bo okno, kot je to.</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>Enkrat kliknemo na naš element "Button" na obrazcu in spremenimo vrednost "Caption" v oknu inšpektorja v katero koli drugo. Na primer beseda "V redu". Pritisnemo Enter. Na obrazcu vidimo, kako je element spremenil ime.</p><p>Enako bomo naredili z Edit-i, le da jih ne bomo preimenovali, ampak jih bomo naredili brez vsebine. Izberite jih po vrsti in počistite vrednost Besedilo v inšpektorju. Ne pozabite pritisniti Enter.</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>Kot rezultat, naš obrazec izgleda takole.</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>Zdaj, da bi naš kalkulator deloval, morate napisati potrebno programsko kodo za postopek našega gumba. Dvakrat kliknite element Button in odprite izvorni urejevalnik.</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>Vidiš? Postopek Button1Klik. To je postopek, ki je odgovoren za to, kaj se zgodi, ko enkrat kliknemo na gumb. In zgodilo bi se naslednje: program mora prikazati vsoto številk, vnesenih v prvi dve polji v tretjem Uredi. Napišemo kodo.</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>Napisati moramo tako preprostih 5 vrstic kode. Komentarje in pojasnila si lahko ogledate na zgornji sliki. Po tem pritisnemo ta gumb.</p> <p>Naš projekt bo sestavljen. Preveden bo v program. V prvi dve polji vpišemo številke, kliknemo na gumb in dobimo vrednost vsote.</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>Zaključek</h2> <p>Lahko kliknete gumb »Datoteka«, nato »Shrani vse«, izberete mapo, ki jo želite shraniti, in imeli boste popoln program, ki ga je mogoče zagnati z namizja. Zdaj poskusite sami ugotoviti, kaj morate ponovno napisati v tej kodi, tako da program razdeli dve številki in ne sešteje. Namig: spremeniti morate vrsto podatkov. Spodnji video prikazuje podoben primer, vendar v okolju Delphi 7, ne Lazarus.</p><p><span class="6qR5tjJKK3g"></span></p> <p>V zadnjem času se veliko pozornosti posveča izgradnji sistemov e-poslovanja ali kot jih tudi imenujejo – B2B (business to business). Upoštevajoč priporočila za izgradnjo izmenjavo pretočnih sistemov koordinacijskega telesa internetnih tehnologij - WWW Consortium: poudarek je na XML tehnologijah in izgradnji sistemov za izmenjavo dokumentov XML.</p> <p>Prednost uporabe XML v e-poslovanju je visoka učinkovitost B2B sistemov ob nizkih stroških za njegovo ustvarjanje zaradi jasne in vizualne predstavitve strukturiranih informacij, zmožnosti uporabe sodobnih omrežnih protokolov in ustvarjanja poslovnih sistemov v realnem času.</p> <p>Neodvisnost predstavitve informacij v obliki dokumentov XML omogoča različnim podjetjem, ki se ukvarjajo z e-poslovanjem, da neodvisno drug od drugega proizvajajo programsko opremo.</p> <p>V vseh sistemih je izmenjava praviloma zgrajena po isti shemi z uporabo zahtev HTTP. SSL se uporablja kot protokol za varnost informacij (vendar je to ločena tema).</p> <p>Ena od možnih možnosti za obdelavo sporočil XML je izdelava aplikacij BIN/CGI (ISAPI) ali komponent COM (strežnika), ki generirajo ali obdelujejo dokumente XML.</p> <p>Po eni strani aplikacija deluje kot odjemalec, ki v načinu POST izda HTTP zahtevo, po drugi strani pa je WEB strežnik, na strani katerega se zahteva obdela in izda odgovor. Izmenjava informacij uporablja dokumente XML.</p> <p>Ena najučinkovitejših možnosti implementacije je uporaba obstoječega razčlenjevalnika XML, ki podpira model DOM. Tak razčlenjevalnik je distribucijski paket Win'98 ali sestavni del IE 4.7 in novejši (za Win'95) in predstavlja COM strežnik, ki se nahaja v knjižnici msxml.dll.</p> <p>Komponentni objektni model (COM) – predstavlja enkapsulirane podatke in metode v eno entiteto in način za dostop do njih prek sistema vmesnikov. Z uporabo orodij Delphi je zelo enostavno dostopati do razredov predmeta COM (v en strežnik COM je lahko vključenih več razredov). Do objektov se dostopa z inicializacijo primerka razreda prek vmesniškega sistema. Opis vmesnikov izvaja jezik definicije vmesnika (IDL), ki se lahko izvede s pomočjo okolja samodejno.</p> <p>Orodja Delphi se uporabljajo za uvoz iz strežnika COM <i>msxml.dll</i>, so zgrajene datoteke za opis vmesnika IDL in datoteka za binarni opis tipov knjižnic - TLB. Ta operacija se izvede prek sistemskega menija: <b>Projekt | Vrsta Uvoz knjižnice:</b>(slika 1). Nato se prikaže pogovorno okno (slika 2), v katerem morate izbrati objekt COM (v našem primeru je objekt registriran pod imenom "Microsoft.XMLDom (različica 2.0)") in ustvariti datoteko TLB (gumb <b>Ustvari enoto</b>). Z uporabo datoteke TLB okvir ustvari datoteko z opisom strežnika COM "Pascal" - MSXML_TLB.pas</p> <p>Datoteka MSXML_TLB.pas opisuje vse vmesnike, konstante in sorazrede strežnika COM.</p> <p>Za dostop do predmetov elementa COM potrebujete direktivo <b>UPORABE</b> dodajte ime datoteke z opisom knjižnice (MSXML_TLB.pas). Spodaj je preprost program, ki uporablja standardni razčlenjevalnik DOM msxml.dll, ki naloži dokument XML in ga prikaže v elementu besedilnega polja Memo1.</p> <b>uporablja</b> Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, OleServer, MSXML_TLB, StdCtrls; <b>tip</b> TForm1 = <b>razredu</b>(TForm) Button1: TButton; Memo1: TMemo; <b>postopek</b> Button1Click (Pošiljatelj: TObject); <b>konec;</b> <b>var</b> Obrazec1: TForm1; <b>izvajanje</b>($ R * .DFM) <b>Postopek</b> TForm1.Button1Click (Pošiljatelj: Tobject); <span>// deklaracija soclass predmeta DOMDocument;</span> <b>var</b> coDoc: CoDOMDocument; <span>// razred skladen z vmesnikom IDOMDocument;</span> <b>var</b> Dokument: IXMLDOMDocument; <b>začeti</b> <span>// ustvarimo primerek predmeta DOMDocument;</span> Dokument: = coDoc.Ustvari; <span>// pokličemo metodo Load primerka predmeta DOMDocument;</span> Doc.load ("data.xml"); <span>// dostop do lastnosti xml primerka DOMDocument;</span> Memo1.Besedilo: = Doc.xml; <b>konec;</b> <b>konec.</b> <h2>Koncept DOM – objektni model dokumenta</h2> <p>Vsak dokument XML je predstavljen kot nabor več objektov (razredov), s pomočjo katerih je omogočen dostop do posameznih elementov (predmetnih polj). DOM - vmesnik opisuje dostop do preprostih objektov tipa DOMString ali CharacterData ter do delov ali posameznih elementov dokumenta XML: DOMFragmentElement, DOMNode, DOMElement.</p> <p>Sledijo najpomembnejše lastnosti in metode objektov XMLDOMDocument, XMLDOMNode, XMLDOMNodeList. Opozoriti je treba, da metode in funkcije objektov DOM, predstavljene spodaj (Document Object Model), uporablja Microsoftov razčlenjevalnik XML msxml.dll in so nekoliko širše od modela DOM, ki ga je odobril konzorcij W3C.</p> <p>Popolnejši opis vmesnika objekta DOM je na voljo na</p> <table cellspacing="0" cellpadding="4" width="500" border="1"><tbody><tr><td valign="top" colspan="2">Objekt XMLDOMDocument</td> </tr><tr><td valign="top" colspan="2">Predstavlja najvišjo raven hierarhije objektov in vsebuje metode za delo z dokumentom: nalaganje, analiziranje, ustvarjanje elementov, atributov, komentarjev itd. ...</td> </tr><tr><td valign="top" colspan="2"><b>Lastnosti</b> </td> </tr><tr><td valign="top" width="39%"><b>Async</b> </td> <td valign="top" width="61%">Lastnost, ki identificira trenutni način obdelave</td> </tr><tr><td valign="top" width="39%" height="19"><b>ParseError</b> </td> <td valign="top" width="61%" height="19">Vrne sklic na objekt za obravnavo napak XMLDOMParseError</td> </tr><tr><td valign="top" width="39%"><b>Omogoči - onemogoči preverjanje dokumenta.</b> </td> <td> </td> </tr><tr><td valign="top" width="39%"><b>url</b> </td> <td valign="top" width="61%">Vrne URL dokumenta</td> </tr><tr><td valign="top" width="39%"><b>documentElement</b> </td> <td valign="top" width="61%">Vsebuje sklic na korenski element dokumenta kot objekt XMLDOMElement.</td> </tr><tr><td valign="top" colspan="2"><b>Metode</b> </td> </tr><tr><td valign="top" width="39%"><b>naloži (url) <br>loadXML (xmlString)</b> </td> <td valign="top" width="61%">Naloži dokument XML,</td> </tr><tr><td valign="top" width="39%"><b>shrani (objTarget)</b> </td> <td valign="top" width="61%">Shrani dokument XML v datoteko</td> </tr><tr><td valign="top" width="39%"><b>prekiniti</b> </td> <td valign="top" width="61%">Prekinitev postopka nalaganja in obdelave dokumenta.</td> </tr><tr><td valign="top" width="39%"><b>createAtribute (ime)</b> </td> <td valign="top" width="61%">Ustvari nov atribut s podanim imenom za trenutni element.</td> </tr><tr><td valign="top" width="39%"><b>createNode (vrsta, ime, nameSpaceURI)</b> </td> <td valign="top" width="61%">Ustvari vozlišče določenega tipa in imena</td> </tr><tr><td valign="top" width="39%"><b>createElement (tagName)</b> </td> <td valign="top" width="61%">Ustvari element dokumenta z navedenim imenom.</td> </tr><tr><td valign="top" width="39%"><b>createTextNode (podatki)</b> </td> <td valign="top" width="61%">Ustvari besedilo v dokumentu</td> </tr><tr><td valign="top" width="39%"><b>getElementsByTagName (ime oznake)</b> </td> <td valign="top" width="61%">Vrne sklic na zbirko elementov dokumenta z danim imenom</td> </tr><tr><td valign="top" width="39%"><b>nodeFromID (idString)</b> </td> <td valign="top" width="61%">Poiščite element po ID-ju</td> </tr></tbody></table><br><table cellspacing="0" cellpadding="4" width="500" border="1"><tbody><tr><td valign="top" colspan="2"> <b>Objekt XMLDOMNode</b> </td> </tr><tr><td valign="top" colspan="2">Objekt XMLDOMNode, ki izvaja osnovni vmesnik DOM <b>vozlišče</b>, je namenjen manipulaciji z ločenim vozliščem drevesa dokumenta. Njegove lastnosti in metode vam omogočajo, da dobite in spremenite popolne informacije o trenutnem vozlišču - njegovo vrsto, ime, polno ime, njegovo vsebino, seznam podrejenih elementov itd.</td> </tr><tr><td valign="top" colspan="2"><b>Lastnosti</b> </td> </tr><tr><td valign="top" width=" "><b>ime vozlišča, ime baze</b> </td> <td valign="top" width="65%">Vrne ime trenutnega vozlišča.</td> </tr><tr><td valign="top" width="35%"><b>predpona</b> </td> <td valign="top" width="65%">Vrne predpono imenskega prostora.</td> </tr><tr><td valign="top" width="35%"><b>dataType</b> </td> <td valign="top" width="65%">Določa vrsto vsebine trenutnega vozlišča</td> </tr><tr><td valign="top" width="35%"><b>nodeType, nodeTypeString</b> </td> <td valign="top" width="65%">Vrne vrsto trenutnega vozlišča:</td> </tr><tr><td valign="top" width="35%"><b>lastnosti</b> </td> <td valign="top" width="65%">Pridobi seznam atributov trenutnega vozlišča kot zbirke XMLDOMNamedNodeMap.</td> </tr><tr><td valign="top" width="35%"><b>besedilo</b> </td> <td valign="top" width="65%">Vrne vsebino trenutnega poddrevesa kot besedilo</td> </tr><tr><td valign="top" width="35%"><b>xml</b> </td> <td valign="top" width="65%">Vrne XML predstavitev trenutnega poddrevesa.</td> </tr><tr><td valign="top" width="35%"><b>nodeValue</b> </td> <td valign="top" width="65%">Vrne vsebino trenutnega vozlišča.</td> </tr><tr><td valign="top" width="35%"><b>otroška vozlišča</b> </td> <td valign="top" width="65%">Vrne seznam podrejenih elementov kot XMLDOMNodeList.</td> </tr><tr><td valign="top" width="35%"><b>firstChild, lastChild</b> </td> <td valign="top" width="65%">Vrne prvega/zadnjega otroka</td> </tr><tr><td valign="top" width="35%"><b>prejšnji brat, naslednji brat</b> </td> <td valign="top" width="65%">Vrne prejšnjega/naslednjega brata.</td> </tr><tr><td valign="top" width="35%"><b>parentNode</b> </td> <td valign="top" width="65%">Vsebuje povezavo do nadrejenega elementa.</td> </tr><tr><td valign="top" width="35%"><b>lastniški dokument</b> </td> <td valign="top" width="65%">Vrne kazalec na dokument, ki vsebuje trenutno vozlišče.</td> </tr><tr><td valign="top" colspan="2"><b>Metode</b> </td> </tr><tr><td valign="top" width="35%"><b>appendChild (newChild)</b> </td> <td valign="top" width="65%">Trenutnemu vozlišču doda novega otroka.</td> </tr><tr><td valign="top" width="35%"><b>insertBefore (newChild, refChild)</b> </td> <td valign="top" width="65%">Vstavi podrejeno vozlišče in ga postavi v trenutno poddrevo levo od vozlišča, ki ga poda refChild.</td> </tr><tr><td valign="top" width="35%"><b>cloneNode (globoko)</b> </td> <td valign="top" width="65%">Ustvari kopijo trenutnega predmeta.</td> </tr><tr><td valign="top" width="35%"><b>getAttribute</b><b>(ime) <br> </b><b>getAttributeNode</b><b><span>(ime) <br>setAttribute (ime, vrednost) <br>setAttributeNode (XMLDOMAttribute)</span> </b> </td> <td valign="top" width="65%">Dostop do atributov (ustvarjanje, branje, pisanje) predmeta. Ime je ime atributa, vrednost je njegova vrednost. Vrne vrednost objekta XMLDOMAttribute.</td> </tr><tr><td valign="top" width="35%"><b>replaceChild (newChild, oldChild) removeChild (oldChild)</b> </td> <td valign="top" width="65%">Zamenjava objekta oldChild trenutnega seznama podrejenih objektov z newChild. Brisanje predmeta oldChild</td> </tr><tr><td valign="top" width="35%"><b>selectNodes (patternString) selectSingleNode (patternString)</b> </td> <td valign="top" width="65%">Vrne predmet XMLDOMNodeList, izbran z vzorcem iskanja ali prvim vozliščem</td> </tr><tr><td valign="top" width="35%"><b>transformNode (stylesheet) <br>transformNodeToObject (preglednica slogov, outputObject)</b> </td> <td valign="top" width="65%">Poddrevu trenutnega vozlišča dodeli slogovno tabelo in vrne niz, ki je rezultat obdelave. Parameter je sklic na objekt DOMDocument, ki vsebuje stavke XSL.</td> </tr></tbody></table><br><h2>Uporaba XML v poslovanju.</h2> <p>Za jasnejšo sliko je potrebna razlaga in zakaj je vse to potrebno, da bi razumeli, kako deluje:</p> <p>Pri gradnji B2B ali korporativnega ERP sistema, pri organizaciji izmenjave informacij XML dokumentov med podjetji ali podružnicami pr-I se uporablja učinkovito preizkušen sistem prenosa informacij, ki temelji na obstoječih WEB strežnikih prek protokolov HTTP.</p> <p>Na eni strani aplikacija deluje kot odjemalec, ki v načinu POST izda HTTP zahtevo, na drugi strani pa je WEB strežnik, na strani katerega se zahteva obdela in izda odgovor. Dokumenti XML se uporabljajo kot izmenjava.</p> <p>Na primer, v preprostem korporativnem sistemu ERP, računovodskem programu (ACS Accounting), je treba generirati zahtevo za račun in ga poslati v poslovalnico, ki ima skladišče (ACS Warehouse). AWP Podobna izjava o težavi pri ustvarjanju sistema B2B, ko podjetje A zahteva razpoložljivost izdelkov (odda naročilo za nakup) od dobavitelja B.</p> <p>Podjetje A in njegov program delujeta kot stranka. Skladišče oskrbuje dobavitelj B, ki ima skladiščni kompleks z bazo podatkov na strežniku SQL. Izmenjava poteka preko korporativnega WEB strežnika dobavitelja V.</p> <p>Spodaj je naslednji tipičen algoritem izmenjave:</p> <br>Slika 3. <ol><li><b>Podjetje A</b> inicira <b>proces A</b>(naročilo izdelka), ki deluje kot WEB odjemalec.</li><li><b>Proces A</b> generira dokument XML (na primer zahtevo za račun) in ga posreduje kot http zahtevo POST na WEB strežnik ponudnika B. Identifikator vira aplikacije za obdelavo se uporablja kot URI. URI je lahko enak za vse vrste dokumentov ali posamezen za vsako vrsto. Vse je odvisno od strukture B2B (WEB) strežnika.</li><li>WEB strežnik analizira zahtevo in ustvari strežnik <b>Proces B</b> s posredovanjem telesa dokumenta XML kot parametra. <br>Proces B zažene WEB strežnik in se obdeluje bodisi kot stran ASP, CGI (ISAPI) - aplikacija ali strežnik JAVA (strežniška aplikacija)</li><li><b>Proces B</b>- generira zahtevo za strežnik baze podatkov SQL.</li><li>Strežnik SQL izvede potrebne operacije v bazi podatkov, generira odgovor in ga vrne <b>Proces B</b>.</li><li>Glede na odgovor strežnika SQL <b>Proces B</b> ustvari dokument XML (odgovor) in ga vrne kot odgovor na zahtevo http odjemalski aplikaciji.</li><li>Nadalje, odvisno od situacije na strani odjemalca, se oblikuje nova http zahteva ali pa se seja konča.</li> </ol><h2>Nekaj ​​besed o organizaciji pretoka dokumentov.</h2> <p>Splošno pravilo za razvoj sistema za izmenjavo dokumentov XML je:</p><ul><li><b>Prvič</b>- razvoj diagrama poteka elektronskih dokumentov in njihove strukture;</li><li><b>Drugič</b>- razvoj tabel procesnih funkcij (podprocesov), t.j. kakšno funkcijo glede na kateri dokument XML bo izvajal vsak proces.</li> </ul><p>Vsak dokument XML, tako kot dokument HTML, mora biti sestavljen iz glave sporočila (informacije, obdane z oznakami) in telesa sporočila (za zahtevo so te informacije uokvirjene z oznakami za odgovor na zahtevo). Da je dokument XML dobro oblikovan, je treba njegova dva sestavna dela "Naslov" in "Zahteva" na primer uokviriti z oznakami. Vrsta tipičnega dokumenta je predstavljena spodaj:</p> <p>Glava (slika 4) mora v nasprotju z dokumentom HTML vsebovati različne vrste storitev, vključno z informacijami o vrsti poslanega dokumenta in postopku njegove obdelave. Telo dokumenta vstopi v obdelavo informacij, t.j. vsebina, uokvirjena z oznakami. Treba je opozoriti, da mora biti struktura naslovov enaka za vse vrste dokumentov.</p> <p>Za proces, ki ga zažene strežnik, je zaželeno (vendar ni nujno) sestaviti algoritem obdelave, kot sledi:</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>Slika 6. <h2>Nekaj ​​temeljnih točk pri ustvarjanju odjemalske strani</h2> <p>Kot smo že pojasnili, se pri ustvarjanju dokumenta XML uporablja njegova predstavitev v obliki modela DOM. Spodaj je primer dela besedila Delphi v programu za ustvarjanje glave sporočila xml.</p> <b>postopek</b> TThread1.HeaderCreate (Pošiljatelj: Tobject); <b>var</b> <span>// deklaracija razreda, potrebna za ustvarjanje</span> coDoc: CoDomDocument; <span>// Objekt XMLDomDocument</span> Dokument: DomDocument; r: element IXMLDOME; Vozlišče: IXMLDOMElement; // DOMText txt: IXMLDOMText; // atribut atributa DOMA: IXMLDOMAttribute; <b>začeti</b> <span>// ustvarimo dokument DOM</span> Dokument: = coDoc.Ustvari; Doc.Set_async (false); <span>// začetni začetek dokumenta DOM</span> Doc.LoadXML (" <Header/>"); <span>// ustvarimo element DOME (oznaka<<b>Pošiljatelj</b>>) </span> Vozlišče: = Doc.createElement ("Pošiljatelj"); <span>// ustvarimo besedilno vozlišče " <b>Typhoon LLC</b>" </span> txt: = Doc.createTextNode ("Typhoon LLC"); <span>// dodelitev vozlišču<<b>Pošiljatelj</b>> vrednost</span> <span>// besedilno vozlišče " <b>Typhoon LLC</b>" </span> Node.appendChild (txt); <span>// dodaj element<<b>Pošiljatelj</b>> v koren dokumenta kot otrok</span> r.appendChild (vozlišče); <span> <<b>Od</b>> </span> Vozlišče: = Doc.createElement ("Od"); txt: = Doc.createTextNode ("http://tayfun.ru/xml/default.asp"); Node.appendChild (txt); r.appendChild (vozlišče); <span>// podobne operacije za oznako<<b>Za</b>> </span> Vozlišče: = Doc.createElement ("Za"); txt: = Doc.createTextNode ("http://irbis.ru"); Node.appendChild (txt); r.appendChild (vozlišče); <span>// ustvari DOMElement ()</span> Vozlišče: = Doc.createElement ("TypeDocument"); <span>// ustvarimo vozlišče XMLDOMAttribute</span> Att: = Doc.createAttribute ("Id", "Order"); <span> // <TypeDocument Id="Order"/> </span> Node.appendChild (Att); r.appendChild (vozlišče); <b>konec;</b> <p>Opozoriti je treba, da se deklaracija spremenljivke coDoc: CoDomDocument in Doc: DomDocument ter njena izdelava z metodo Create (Doc: = coDoc.Create;) izvede enkrat. Deklaracija spremenljivke se nahaja v razdelku, ki opisuje globalne spremenljivke, in ne v lokalnem postopku, kot je bilo zaradi jasnosti prikazano v tem primeru (to je ena globalna spremenljivka tipa DomDocument na en programski modul).</p> <p>Rezultat dela zgornjega programa bo ustvarjena glava, uporabljena v našem primeru xml-dokumenta: prikazana na sliki 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>Slika 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>Slika 6.</p><p>Glavna prednost prenosa informacij v obliki dokumentov XML je, da je možno oblikovati sporočilo z uporabo neodvisnih struktur tabel v DBMS tako na sprejemni kot na oddajni strani. V našem primeru predpostavimo, da je treba prenesti informacije o računih podjetja A iz DBMS s strukturo, prikazano na sliki 6</p> <p>Za generiranje dokumenta xml, ki vsebuje račun, je na začetku sestavljena poizvedba SQL (poizvedba A) z informacijami o samem računu:</p> <b>IZBERI</b>* IZ Splošnega računa <b>KJE</b>Številka računa =: št <b>IZBERI</b> Blago, kakovost, cena, HZ_kod <b>IZ</b> Blago <b>KJE</b>Številka računa =: št <span>//: num je parameter, ki določa številko računa.</span> <p>Spodaj je del programa, ki generira telo dokumenta xml:</p> <b>postopek</b> TThread1.DataBodyCreate (Pošiljatelj: Tobject); <b>var</b> <span>// deklaracija razreda in objekta XMLDomDocument</span>// coDoc: CoDomDocument; <span>// mora biti globalen za celoten modul.</span>// Dokument: DomDocument; <span>// razglasimo objekte DOMElement</span> r: element IXMLDOME; // element DOME; Vozlišče, vozlišče2: element IXMLDOME; Vozlišče3, vozlišče4: element IXMLDOME; // DOMText txt: IXMLDOMText; str: niz; <span>// Številka računa: <b>celo število;</b>- globalna spremenljivka - // ima vrednost 987654 // queryA, queryB: <b>Vrvica;</b>- globalna spremenljivka, // ima vrednost, ki ustreza zahtevi // poizvedbaA - zahteva A s splošnimi podatki o računu // poizvedbaB - zahteva B informacije o blagu, opisanem v // računu (glej besedilo)</span> <b>začeti</b> Query.Close; <span>// glej besedilo "zahteva A"</span> Poizvedba.Besedilo: = poizvedbaA; <span>// izvrši zahtevo</span> Query.ExecSQL; Query.Open; <span>// dobimo naslov korenskega elementa</span> r: = Doc.Get_documentElement; Vozlišče2: = Doc.createElement ("Zahteva"); <span>// ustvari DOMElement (oznaka)</span> Vozlišče: = Doc.createElement ("Račun"); <span>// dodaj element v koren</span> r.appendChild (vozlišče2); <span>// dodaj predmet v</span> vozlišče 2. appendChild (vozlišče); <span>// ustvari DOMElement (oznaka)</span> Vozlišče3: = Doc.createElement ("Odhod"); <span>// dodaj predmet v</span> vozlišče. appendChild (vozlišče3); <span>// klic v polje "Odhod" v zahtevi</span> str: = Query.FieldByName ("Odhod"). AsString; <span>// ustvarite besedilno vozlišče = vrednost polja</span><span>// vozlišču dodeli vrednost</span> <span>// besedilno vozlišče, spremenljivka str</span> Node.appendChild (txt); <span>// podobne operacije za oznako <Destination>, <DataSend>, // <DataDepurture>, <Currency> // <DestinationCompany>(polje DB "Prejemnik")</span> Vozlišče: = Doc.createElement ("Cilj"); <span>// ime polja baze podatkov morda ni enako imenu</span> str: = Query.FieldByName ("Prejemnik") .AsString; <span>// oznaka, to je prednost uporabe</span> txt: = Doc.createTextNode (str); <span>// DOM vmesnika pred DBMS, ki podpira vmesnik XML, // kot ORACLE 8i ali Ms SQL 2000</span> Node.appendChild (txt); ... <span>// generiranje zahteve za specifikacijo blaga</span> <span>// zapremo zahtevo za dostop</span> Query.Close; <span>// glej v besedilu "zahteva B", info. O blagu</span> Poizvedba.Besedilo: = poizvedba; <span>// dodelitev vrednosti parametrov</span> Query.Params.AsInteger: = številka računa; <span>// izvrši zahtevo</span> Query2.ExecSQL; <span>// odprt dostop do zahtevanih podatkov</span> Query.Open; <span>// ustvari DOMElement (oznaka)</span> Vozlišče3: = Doc.createElement ("Imems"); <span>// dodaj predmet v</span> vozlišče. appendChild (vozlišče3); <span>// zanke skozi vse vrstice poizvedbe</span> <b>medtem</b> <b>ne</b> Eof.Query <b>narediti</b> begin Node4: = Doc.createElement ("Imem"); <span>// dodaj predmet v</span> Node3.appendChild (Node4); <span>// oblikovanje podatkov za oznako</span> str: = Query.FieldByName ("Cena"). AsString; txt: = Doc.createTextNode (str); Node.appendChild (txt); ... <span>// podobne operacije za oznake <HZ_Cod>, <Quality>, <GoodName> </span> <b>konec;</b> <b>konec;</b> <p>Kot rezultat tega postopka se ustvari naslednje besedilo dokumenta 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>Za oblikovanje zahteve se uporablja metoda Open objekta <b>IXMLHttpRequest</b>:</p> <b>postopek</b> Odpri (const bstrMethod, - vrsta metode = "POST" bstrUrl, - url strežnika varAsync, - način komunikacije asinhroni / sinhroni = resnični bstrUser, - uporabniško ime za preverjanje pristnosti bstrPassword) - geslo <h2>Izdelava strežniške strani obdelave dokumentov</h2> <p>Kot smo že omenili, lahko obdelavo zahteve HTTP obravnavajo bodisi CGI aplikacije bodisi strežniški programi Java. Možna je tudi varianta pisanja ASP-strani. Toda v tem primeru je prenos podatkov možen le z metodo "GET" prek poizvedbenega niza. Vendar je obdelava zahteve HTTP za strani ASP učinkovitejša od CGI aplikacije. Vendar po mojem mnenju ni pomembno, kako ga obdelati, ampak bolj pomembno je rešiti vprašanje - kako zgraditi program za obdelavo, in ne s kakšnimi sredstvi.</p> <p>Če smo iz prejšnjega poglavja preučili možnosti za oblikovanje dokumenta XML, je naloga strežniške aplikacije nasprotna - razčlenjevanje dokumentov XML. Spodaj je del programa, ki razčleni dokument xml:</p> <b>postopek</b> Tthread1.DataParser (Pošiljatelj: Tobject); <b>var</b> <span>// razglasimo objekte DOMElement</span> r, FNode: IXMLDOMElement; Str, Ime datoteke: String; parm: String; <span>// soclass deklaracija in</span> CoDocXML, CoDocXSL, CoDocResult: CoDomDocument; <span>// Objekt XMLDomDocument</span> XMLDoc, XSLDoc, ResultDoc: DomDocument; <span>// HttpStr: String; - globalna spremenljivka, ki vsebuje niz zahteve HTTP</span> <b>Začeti</b> XMLDoc: = coDocXML.Ustvari; XMLDoc.LoadXML (HttpStr); <span>// dobimo naslov korenskega elementa</span> r: = Doc.Get_documentElement; <span>// dobimo vrednost elementa</span> FNode: = r.SelectSingleNode ("// TypeDocument"); <span>// dobimo vrednost atributa id = "Naročilo"</span> Ime datoteke: = FNode.GetAttibute ("id"); <span>// in oblikovanje imena datoteke Order.xsl</span> Ime datoteke: = Ime datoteke + ". Xsl"; <span>// ustvarimo dokument XSLDoc</span> XSLDoc: = coDocXSL.Ustvari; XSLDoc.LoadXML (Ime datoteke); <span>// ustvarimo dokument XMLDoc</span> ResultDoc: = coDocResult.Create; <span>// nastavi sinhroni način obdelave</span> ResultDoc.Set_async (false); <span>// nastavi preverjanje razčlenitve</span> ResultDoc.validateOnParse: = res; <span>// razčlenitev XMLDoc z uporabo predloge XSL</span> XMLDoc.transformNodeToObject (XSLDoc, ResultDoc); <span>// spremenljivki Str je dodeljena besedilna vrednost</span> <span>// nastalega dokumenta.</span> Str: = ResultDoc.text; <span>// najdemo element</span> FNode: = r.SelectSingleNode ("// Številka računa"); <span>// in dobimo vrednost elementa</span> parm: = FNode.text; <span>// zapremo zahtevo za dostop</span> Query.Close; Poizvedba.Besedilo: = Str; <span>// dodelitev vrednosti parametra</span> Query.Params.AsString: = parm; <span>// izvrši zahtevo</span> Query.ExecSQL; <b>konec;</b> <p>Celoten vrhunec razčlenjevanja je v uporabi predloge XSL, ki je individualno ustvarjena za vsako vrsto dokumenta. Rezultat razčlenjevanja je niz poizvedbe SQL. Nato bo izvedba ustvarjenega niza poizvedbe SQL naredila potrebne spremembe podatkov v DBMS.</p> <p>Prednost uporabe razčlenjevanja po predlogi je tudi v tem, da dobite nekakšno fleksibilnost podatkov in popolno neodvisnost algoritma od programske kode. Spodaj je besedilo predloge XSL, ki se uporablja za obdelavo dokumenta tipa ORDER:</p><p> <!-- файл Order.xsl --> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <xsl:for-each select="//header">VSTAVI v TABREG (OD, DO, TYPEDOC, telo) VREDNOSTI (" <xsl:value-of select="from" />", "<xsl:value-of select="to" />", "<xsl:value-of select="TypeDocument/@id" />") </xsl:for-each> <xsl:for-each select="//item">VSTAVITE v BLAGO (številka računa, ime, cena, kakovost) VREDNOSTI (": št", " <xsl:value-of select="name" />", "<xsl:value-of select="price" />", "<xsl:value-of select="quality" /> ") </xsl:for-each> </xsl:template> </xsl:stylesheet> </p><p>Pri razlagi zgornjega primera je treba opozoriti, da je uporaba para oznak formalne narave, saj po razčlenjevanju mora nastali dokument XML formalno vsebovati vsaj eno vozlišče. Metoda ResultDoc.text dodeli besedilno vrednost ResultDoc, pridobljeno med razčlenjevanjem dokumenta XML. V tem primeru je vrednost vse, kar je uokvirjeno s parom oznak in, t.j. poizvedbo SQL, ki smo jo ustvarili.</p> <p>Druga značilnost pisanja programa je možnost uporabe parametra SQL <b>: št.</b> Uporaba parametra poenostavi besedilo predloge xsl. Definicija vrednosti ustreznih elementov vozlišč dokumenta XML je na začetku določena z izbiro po imenu ustreznega vozlišča, na primer:</p><h2>XSL na prvi pogled</h2> <p>XSL je akronim, ki izhaja iz eXtensible Stylesheet Language, jezika za oblikovanje slogovnih listov (podatki XML). Kot lahko vidite iz glave, se za formatiranje podatkov XML uporablja razširljivi jezik slogovnih listov (XSL). Po definiciji je W3C XSL sestavljen iz dveh delov:</p> <ul><li>XSLT - transformacija XSL. Jezik, ki se uporablja za preoblikovanje ali formatiranje (preoblikovanje) dokumentov XML. Tako lahko s pomočjo XSLT dobimo različne reze nabora podatkov in oblik predstavitve podatkov.</li><li>Elementi oblikovanja. Ti elementi vključujejo vse tipografske elemente podatkov, potem ko so bili obdelani z XSL. Uporablja se samo za ustvarjanje strani HTML.</li> </ul><p>S pomočjo XSLT lahko iz datoteke XML izberemo podatke, ki jih potrebujemo, in jih uredimo v obliki za predstavitev uporabniku. V našem primeru smo na primer podatke XML preoblikovali v obliki poizvedbe SQL. Klasična uporaba XSL je običajno formatiranje podatkov v obliki strani HTML ali, redkeje, v obliki datotek RTF.</p> <p>Datoteka XSL opisuje predlogo, po kateri bo izvedena transformacija podatkov XML. Če se vrnemo k predlogam xsl, lahko v XSLT ločimo naslednje elemente (direktive):</p> <table cellspacing="0" cellpadding="4" width="500" border="1"><tbody><tr><td valign="top" width="31%"> <b>direktive XSL</b> </td><th align="middle" width="69%"> <b>opis</b> </th> </tr><tr><td>xsl: predloge za uporabo</td> <td>Direktiva, ki označuje uporabo ujemajočih se predlog za atribut select = "ime predloge"</td> </tr><tr><td>xsl: atribut</td> <td>ustvari drevo atributov in ga doda izhodnemu elementu, ime parametra = "ime atributa", imenski prostor je URI imenskega prostora (predpona imenskega prostora)</td> </tr><tr><td>xsl: predloga klica</td> <td>pokliče predlogo, ime atributa = "URI v predlogo"</td> </tr><tr><td>xsl: izberite <br>xsl: kdaj <br>xsl: drugače</td> <td>izbira po pogoju xsl: ko je izraz = "ocena izraza v skriptu", <br>jezik = "ime-jezika" <br>test = "ocenjen izraz"</td> </tr><tr><td>xsl: komentar</td> <td>ustvari komentar v izhodnem dokumentu</td> </tr><tr><td>xsl: kopija <br>xsl: kopija</td> <td>kopira trenutno vozlišče v izhodni vir ali vstavi fragment dokumenta v vozlišče, kjer je atribut select = "ime izvornega vozlišča"</td> </tr><tr><td>xsl: element</td> <td>ustvari izhodni element z imenom, atribut name = "ime elementa", namespace = "uri namespace reference"</td> </tr><tr><td>xsl: za-vsakega</td> <td>znova uporabi predlogo za vsa vozlišča na seznamu vozlišč, atribut select določa seznam vozlišč</td> </tr><tr><td>xsl: če</td> <td>preverjanje pogoja, nastavljeno s testnim atributom kot izraz</td> </tr><tr><td>xsl: vključi</td> <td>vključuje zunanjo predlogo, atribut href = "referenca URI"</td> </tr><tr><td>xsl: izhod</td> <td>določa izhod, atribut metode je lahko "xml", "html" ali "text"</td> </tr><tr><td>xsl: param</td> <td>določa vrednost parametrov, ime atributa = "ime parametra", izberite = "vrednost"</td> </tr><tr><td>xsl: navodila za obdelavo</td> <td>ustvari navodilo za obdelavo, ime atributa = "ime postopka navodil"</td> </tr><tr><td>xsl: razvrsti</td> <td>razvrsti niz vozlišč, atributi select = "ime vozlišča", data-type = vrsta podatkov ("besedilo" | "številka" | Qname), vrstni red = smer razvrščanja ("naraščajoče" | "padajoče")</td> </tr><tr><td>xsl: slogovna lista</td> <td>definira dokument predloge xsl, je korenski element za XSLT</td> </tr><tr><td>xsl: predloga</td> <td>definira predlogo xsl, ime atributa = "predpona URI za ime predloge", match = "indikacija vozlišča, na katero je predloga uporabljena"</td> </tr><tr><td>xsl: besedilo</td> <td>generira besedilo v izhodni tok, atribut disable-output-escaping = "da" ali "ne", označuje možnost ustvarjanja znakov ESC</td> </tr><tr><td>xsl: vrednost-od</td> <td>vstavi vrednost izbranega vozlišča kot besedilo, atribut select = "kazalec na vozlišče", iz katerega je vzeta vrednost</td> </tr><tr><td>xsl: spremenljivka</td> <td>določa vrednost meja spremenljivke, ime atributa = "ime spremenljivke", select = "izračun vrednosti spremenljivke"</td> </tr><tr><td>xsl: s param</td> <td>uporabi parameter za predlogo, ime atributa = "ime parametra", izberite = izraz za oceno trenutnega konteksta, privzeta vrednost "."</td> </tr></tbody></table><h2>Zaključek</h2> <p>Na koncu je treba omeniti, da z uporabo standardnega razčlenjevalnika XML <i>msxml.dll</i> ni edino orodje za razčlenjevanje in ustvarjanje dokumentov XML. Na primer, za učinkovito ustvarjanje dokumentov XML uporabite komponente <b>TPageProduser</b> in <b>TableProduser</b>... Toda ta članek samo poudarja širino in uporabnost modela DOM v praksi.</p> <p>Avtor bo zelo hvaležen za vaše povratne informacije o ustreznosti teme, splošne vsebine, slogu predstavitve, pa tudi za vse druge pripombe, ki bodo pripomogli k nadaljnjemu izboljšanju kakovosti pisanja zbornika in izdaje knjige o temi. tema praktične strani uporabe dokumentov XML v e-poslovanju. Podrobnejše informacije o praktični strani uporabe elektronskih dokumentov so na voljo na avtorjevi spletni strani www.eDocs.al.ru Načrtuje se tudi umestitev izvornih besedil in primerov na avtorjevo spletno mesto.</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">Niste našli odgovora na svoje vprašanje? Poglej tukaj</div> <div class="items"> <div class="related-item"> <a class="related-item__title" href="https://appcube.ru/sl/rashka-kvadratnyi-vatnik-rashka-kvadratnyi-vatnik-vatnik.html"><img src="/uploads/8be2f874cda9a8f8fde03204fe7476f6.jpg" width="120" height="120" alt="Rashka-kvadrat prešita jakna Prešita jakna stripi" class="related-item__image" / loading=lazy loading=lazy>Rashka-kvadrat prešita jakna Prešita jakna stripi</a> <div class="related-item__comments"><span></span></div> </div> <div class="related-item"> <a class="related-item__title" href="https://appcube.ru/sl/sposoby-proverit-balans-i-trafik-na-bilain-sposoby-proverit-ostatok.html"><img src="/uploads/a6d4243b46a2b74554f0ba1bd9f6c548.jpg" width="120" height="120" alt="Načini za preverjanje preostalega prometa na Beeline Preverjanje prometa na modemu Beeline" class="related-item__image" / loading=lazy loading=lazy>Načini za preverjanje preostalega prometa na Beeline Preverjanje prometa na modemu Beeline</a> <div class="related-item__comments"><span></span></div> </div> <div class="related-item"> <a class="related-item__title" href="https://appcube.ru/sl/tvich-vhod-sozdanie-translyacii-na-twitch-sozdanie-scen-i-istochnikov.html"><img src="/uploads/17c57b96b6e245fa09293c72940507f6.jpg" width="120" height="120" alt="Ustvarite Twitch Stream" class="related-item__image" / loading=lazy loading=lazy>Ustvarite Twitch Stream</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 - program za izboljšanje delovanja računalnika in odpravljanje napak v operacijskih sistemih Windows" class="advices__image" / loading=lazy loading=lazy> <div class="advices__title" data-id="3334"><a href="https://appcube.ru/sl/carambis-cleaner---programma-dlya-povysheniya-bystrodeistviya-kompyutera-i.html">Carambis Cleaner - program za izboljšanje delovanja računalnika in odpravljanje napak v operacijskih sistemih 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">Novo</div> <ul> <li><a href="https://appcube.ru/sl/kak-uznat-tarifnyi-plan-na-bilain-kombinaciya-kak-uznat-svoi-tarif.html" >Kako ugotoviti svojo tarifo na Beeline</a></li> <li><a href="https://appcube.ru/sl/mac-os-dlya-nachinayushchih-obuchenie-rabote-na-kompyuterah-i-obuchenie-macbook-na-nashih.html" >Učenje MacBook z našimi tečaji bo delo z računalnikom postalo užitek MacBook tečajev</a></li> <li><a href="https://appcube.ru/sl/kak-uznat-kakaya-versiya-windows-ustanovlena-na-vashem-kompyutere-kak.html" >Kako določiti različico sistema Windows na vašem računalniku Ugotovite, katera različica sistema Windows 8</a></li> <li><a href="https://appcube.ru/sl/kak-sobrat-kompyuter-iz-komplektuyushchih-samostoyatelno-kak.html" >Kako sami zgraditi dober računalnik točno za svoje potrebe</a></li> <li><a href="https://appcube.ru/sl/kak-uznat-versiyu-windows-na-kompyutere-prostye-instrukcii-kak-uznat-versiyu-windows.html" >Kako najdem različico sistema Windows v računalniku?</a></li> <li><a href="https://appcube.ru/sl/mozhno-li-zapisat-dvd-disk-bez-nero-zapis-filmov-i-muzyki-s-pomoshchyu.html" >Snemanje filmov in glasbe z 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">Priljubljeni članki</div> <ul class="sidebar-posts"> <li><a href="https://appcube.ru/sl/volodya-rzhavyi-nastoyashchee-imya-red21-kto-eto-takoi-lichnaya-zhizn-volodi.html"><img src="/uploads/54ac8272b35e8de0637a0b662e8249c7.jpg" width="80" height="80" alt="Volodja zarjavelo pravo ime" / loading=lazy loading=lazy>Volodja zarjavelo pravo ime</a></li> <li><a href="https://appcube.ru/sl/komandnaya-stroka-vin-10-drevnii-sposob-cherez-katalog-ustanovlennyh-programm.html"><img src="/uploads/16085b5c17886710b9432abce1171b0b.jpg" width="80" height="80" alt="Starodavni način: prek imenika nameščenih programov" / loading=lazy loading=lazy>Starodavni način: prek imenika nameščenih programov</a></li> <li><a href="https://appcube.ru/sl/dva-sposoba-kak-zashchitit-yacheiki-v-excel-ot-izmenenii-kak-zashchitit-yacheiku-ot.html"><img src="/uploads/cd73a75e80c9e508e3dbb94f1cf892dd.jpg" width="80" height="80" alt="Kako zaščititi celico pred spremembami v Excelu Kako skriti stolpec v excelu in zaščititi z geslom" / loading=lazy loading=lazy>Kako zaščititi celico pred spremembami v Excelu Kako skriti stolpec v excelu in zaščititi z geslom</a></li> </ul> </div> <div class="section"> <div class="headline">Novo na spletnem mestu</div> <ul class="sidebar-posts sidebar-photo"> <li><a href="https://appcube.ru/sl/kak-skachat-muzyku-s-odnoklassnikov-luchshie-sposoby-programmy-dlya-skachivaniya.html">Programi za prenos glasbe iz sošolcev OK Razširitev glasbe za Google Chrome</a></li> <li><a href="https://appcube.ru/sl/upravlenie-lichnym-kabinetom-bilain-podrobnaya-instrukciya.html">Kontakti za podporo Beeline</a></li> <li><a href="https://appcube.ru/sl/bilain-domashnii-internet-servis-kak-nastraivat-domashnii-internet.html">Kako nastaviti domači internet Beeline: podroben uporabniški priročnik</a></li> <li><a href="https://appcube.ru/sl/zakazat-detalizaciyu-bilain-na-elektronnuyu-pochtu-detalizaciya.html">Podrobnosti klicev Beeline prek vašega osebnega računa</a></li> <li><a href="https://appcube.ru/sl/bilain-lichnyi-kabinet-vhodyashchie-i-ishodyashchie-zvonki-kak-zakazat-detalizaciyu.html">Kako naročiti podrobnosti klicev Beeline za določeno obdobje?</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/sl/">Novo</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/sl/luchshie-programmy-dlya-napisaniya-html-koda-html-reader-besplatnyi-html.html">Html Reader brezplačen urejevalnik html</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6818"><a href="https://appcube.ru/sl/kak-rabotaet-yandeks-disk-na-iphone-kak-s-yandeks-diska-skachat-video-na.html">Kako prenesti videoposnetke z Yandex Disk na iPhone: preprost način</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6817"><a href="https://appcube.ru/sl/licenzionnoe-soglashenie-ob-usloviyah-ispolzovaniya-programmnogo.html">Licenčna pogodba za pogoje uporabe programske opreme Dr</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6815"><a href="https://appcube.ru/sl/airyware-tuner---luchshii-tyuner-v-vashem-smartfone-airyware-tuner---luchshii-tyuner-v-vashem.html">Airyware Tuner - najboljši sprejemnik v vašem pametnem telefonu Aplikacija za uglaševanje kitare v ozadju 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/sl/">Priljubljeno</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/sl/bilain-lichnyi-kabinet-skachat-na-maikrosoft-obzor-prilozheniya-moi-bilain.html">Pregled aplikacije "My Beeline" za Windows Phone</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6811"><a href="https://appcube.ru/sl/best-ofis-freeware---besplatnaya-kompleksnaya-sistema-dlya-malogo-biznesa.html">Najboljši programski paket Najboljša računovodska programska oprema 5</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6810"><a href="https://appcube.ru/sl/antivirus-avg-64-bit-besplatnye-programmy-dlya-windows-skachat.html">Brezplačna programska oprema za Windows brezplačen prenos</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6809"><a href="https://appcube.ru/sl/draiver-nvidia-dlya-8-1-uproshchennoi-besplatnye-programmy-dlya-windows-skachat.html">Brezplačna programska oprema za Windows brezplačen prenos</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6808"><a href="https://appcube.ru/sl/besplatnye-programmy-dlya-windows-skachat-besplatno-besplatnye.html">Brezplačna programska oprema za Windows Prenesite brezplačno Prenesite nvidia za Windows 8</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6807"><a href="https://appcube.ru/sl/megafon-modem-draiver-windows-10-megafon-modem-installyaciya.html">Gonilnik za modem megaphone windows 10</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6806"><a href="https://appcube.ru/sl/megafon-upravlenie-modemom-windows-10-skachat-megafon-modem.html">Megaphone modem nadzor windows 10</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6805"><a href="https://appcube.ru/sl/skachat-prilozhenie-kamera-na-russkom-besplatno-ekrannaya-kamera-ustanovka-veb.html">Zaslonska kamera Namestitev spletne kamere v računalnik z operacijskim sistemom 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/sl/">Priporočeno</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/sl/draivery-dlya-kompyutera-draivery-dlya-kompyutera-skachat.html">Gonilniki za računalnik Prenesite vse gonilnike za Windows 8</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6802"><a href="https://appcube.ru/sl/kak-otkryt-mms-soobshchenie-na-kompyutere-kak-posmotret-mms-na.html">Kako gledati MMS na telefonu: nekaj nasvetov Kako si ogledate večpredstavnostno sporočilo</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6801"><a href="https://appcube.ru/sl/kak-vyzvat-skoruyu-s-mobilnika-kak-vyzvat-ekstrennye-sluzhby-kakaya.html">Kako poklicati reševalne službe</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6800"><a href="https://appcube.ru/sl/skoraya-po-mobilnomu-bilain-kak-vyzvat-na-dom-vracha-skoruyu-ili.html">Kako poklicati zdravnika, rešilca ​​ali nujno pomoč na dom</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6798"><a href="https://appcube.ru/sl/oblako-dlya-peredachi-failov-oblachnoe-hranilishche-dannyh-kak-sozdat.html">Shranjevanje podatkov v oblaku</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6794"><a href="https://appcube.ru/sl/izmenit-pusk-na-vindovs-8.html">Zagon bo spremenil v Windows 8</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6791"><a href="https://appcube.ru/sl/pochemu-vydaet-oshibku-pri-zapuske-kompyutera-nastroikaaivaemost.html">Prilagodljiva programska oprema</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6790"><a href="https://appcube.ru/sl/v-windows-8-vernut-knopku-pusk.html">Windows 8 bo vrnil gumb za zagon</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/sl/">O spletnem mestu</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6900"><a href="">O spletnem mestu</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6901"><a href="">Oglaševanje na spletni strani</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6902"><a href="">Stiki</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 Vse pravice pridržane</p> <p>Spletna stran o računalnikih</p> <ul class="footer-bottom__nav"> <li><a href="" >Oglaševanje na projektu</a></li> </ul> </div> <div class="footer-buttons"> </div> <ul class="footer__soc"> <li><a href="http://vk.com/" target="_blank" class="vk">V stiku z</a></li> <li>sošolci</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>