Računala Windows Internet

Kako napraviti xml datoteku delphi. Internetski turistički vodič - sva zabava na webu. Nekoliko riječi o organizaciji toka dokumenata

Dobrodošli! Ovaj blog je o internetu i računalima, odnosno posvećen je njima.

Vjerojatno je odmah jasno da se na stranici već dugi niz godina nisu pojavili novi članci. Da, to je sudbina većine blogova. Ovaj je projekt nekoć bio ambiciozan pothvat, a autor je, kao i mnogi drugi koji su tada pisali, imao ambiciozne planove postati jedan od najboljih ruskih blogera. Pa, ako pogledate sada, onda je od onih blogova koji su nastajali istovremeno s mojim, većina već nestala u vječnosti. I jednostavno nisam imala dovoljno vremena za blog. Dakle, da, više se ne ažurira. Iako smo jednom s ovim mjestom pobijedili na natjecanju "Blog Runeta 2011".

Imao sam čak i ideju da sve ovo izbrišem, ali sam onda revidirao stare materijale i shvatio da čitateljima i dalje mogu biti od koristi. Da, neki su članci zastarjeli (ako imam dovoljno snage, dobit će odgovarajuće bilješke), ali stranica, na primjer, može biti korisna za početnike - ovdje možete pročitati o Osnovni koncepti Internet, naučite kako konfigurirati Internet, Windows ili čak odlučiti prijeći na Linux. Stoga pogledajte rubrike i odaberite onu koja vam odgovara.

Pa ipak, nadam se da je ovo više od običnog bloga, već pravi vodič za internet. Stranica se može vidjeti u načinu imenika, gdje su svi dostupni članci strukturirani po kategorijama. A tko zna, možda se jednog dana ovdje počnu pojavljivati ​​novi kvalitetni članci.

Sander

Picodi.ru je portal s popustima od International Coupons, poljskog stručnjaka za štednju i jeftinu kupovinu. Poljaci se smatraju jednom od najekonomičnijih nacija na svijetu, pa ne čudi što je ovakav tip projekta izrastao iz poljskog startupa kodyrabatowe.pl. Kako ovaj portal može biti koristan običnom korisniku interneta u Rusiji?

Moderni android telefoni su više od telefona. Navikneš se tipkati instaliranih programa, na povijest vaših poziva i tekstualne poruke, zbirke fotografija i još mnogo toga. Ali vrijeme prolazi, a uređaj koji vam u potpunosti odgovara počinje usporavati, kvariti ili jednostavno gubi svoj izgledni izgled zbog čipova na kućištu ili ogrebotina na ekranu. Postavlja se pitanje odabira novog telefona i promjene android telefon... A ako sada zaobiđemo pitanje izbora, onda "selimo" na novi telefon ostaje ozbiljan problem - apsolutno ne želite pokrenuti sve podatke ispočetka. To je ono o čemu ćemo danas razgovarati.

Većina čitatelja ovog bloga, najvjerojatnije, nikada se nije susrela sa sustavima kontrole verzija i neće ih u bliskoj budućnosti. Šteta je. Ovaj iznimno zgodan izum naširoko koriste programeri, ali, po mom mišljenju, mogao bi biti vrlo koristan za one koji aktivno rade s tekstovima. Ali, vjerojatno, sada ne postoji niti jedan sustav kontrole verzija koji bi bilo lako početi koristiti za "ured" ( Microsoft Office) rad. Ipak, mislim da bi materijal predstavljen u članku mogao biti zanimljiv svim čitateljima.

Ako ste razmišljali o tome kako gledati filmove na mreži s TV-a i biti online, ovaj je članak za vas. Ne, znam da neki televizori već imaju funkciju Smart TV, ali nikad nisam vidio da radi kako treba. Očigledno je stoga nedavno korporacija Google demonstrirala apsolutno zapanjujući uređaj, koji je odmah postao senzacija. Govorimo o Chromecast media streameru (Chromecast), naprednijoj i pristupačnijoj verziji prošlogodišnjeg katastrofalnog Nexusa Q.

Dongle Chromecast, koji nije veći od 2 inča, uključuje se u priključak HDMI TV i omogućuje vam uživanje u gledanju streaming web sadržaja. Za upravljanje streamerom možete koristiti bilo koji uređaj (tablet, računalo, pametni telefon) koji se temelji na operacijskoj platformi iOS, Windows, Android ili Mac OS.

Ovaj članak posvećen je uređaju memorije sustava android, problemima koji mogu nastati zbog njegovog nedostatka i kako ih riješiti. Ne tako davno i sam sam se suočio s činjenicom da je moj android telefon počeo redovito odavati poruke o nedostatku memorije prilikom pokušaja instaliranja aplikacije. Što mi je bilo jako čudno s obzirom na to da je prema opisu na tržištu trebalo biti oko 16GB, a i ovaj sam volumen povećao dodatnom memorijskom karticom. Međutim, postojao je problem i morao sam puno petljati prije nego što sam pronašao ispravna odluka koji ne zahtijeva root pristup ili potpuno tvorničko vraćanje telefona.

XML se sve više koristi za pohranjivanje informacija i njihovu razmjenu između aplikacija i web stranica. Mnoge aplikacije koriste ovaj jezik kao osnovni jezik za pohranjivanje podataka, dok ga druge koriste za izvoz i uvoz XML podataka. Stoga je vrijeme da programeri počnu razmišljati o tome kako se XML podaci mogu koristiti u njihovim vlastitim aplikacijama.

U ovom ćemo članku pogledati XML Document Object Model (DOM) i Microsoftovu implementaciju XML DOM-a.

XML DOM je objektni model koji programeru pruža objekte za učitavanje i obradu XML datoteka. Objektni model sastoji se od sljedećih temeljnih objekata: XMLDOMDocument, XMLDOMNodeList, XMLDOMNode, XMLDOMNamedNodeMap i XMLDOMParseError. Svaki od ovih objekata (osim XMLDOMParseError) sadrži svojstva i metode koje vam omogućuju da dobijete informacije o objektu, manipulirate vrijednostima i strukturom objekta i navigirate strukturom XML dokumenta.

Pogledajmo glavne XML DOM objekte i pokažimo neke primjere njihove uporabe u Borland Delphiju.

Korištenje XML DOM-a u Borland Delphiju

Da biste koristili Microsoft XML DOM u Delphi aplikacijama, trebate povezati odgovarajuću biblioteku tipova na projekt. Da bismo to učinili, izvršavamo naredbu Project | Import Type Library i u dijaloškom okviru Import Type Library odaberite biblioteku Microsoft XML verzije 2.0 (verzija 2.0), koja se obično nalazi u datoteci Windows \ System \ MSXML.DLL

Nakon klika na gumb Create Unit, kreirat će se modul sučelja MSXML_TLB koji će nam omogućiti korištenje XML DOM objekata: DOMDocument, XMLDocument, XMLHTTPRequest i niz drugih, implementiranih u biblioteku MSXML.DLL. Referenca na modul MSXML_TLB mora biti na popisu Koristi.

XML DOM uređaj

Model objekta dokumenta predstavlja XML dokument u strukturi stabla grana. XML DOM API-ji omogućuju aplikacijama navigaciju stablom dokumenta i manipuliranje njegovim granama. Svaka grana može imati određeni tip (DOMNodeType), prema kojem se određuju nadređena i podređena grana. Većina XML dokumenata sadrži grane elementa tipa, atributa i teksta. Atributi su posebna vrsta grane i nisu podređene grane. Za manipuliranje atributima koriste se posebne metode koje pružaju XML DOM objekti.

Uz implementaciju sučelja koje preporučuje World Wide Web Consortium (W3C), Microsoft XML DOM sadrži metode koje podržavaju XSL, XSL uzorke, prostore imena i tipove podataka. Na primjer, metoda SelectNodes vam omogućuje korištenje sintakse XSL uzorka za pronalaženje grana u određenom kontekstu, a metoda TransformNode podržava korištenje XSL-a za izvođenje transformacija.

Testirajte XML dokument

Kao primjer XML dokumenta, uzmimo glazbeni CD-ROM direktorij, koji ima sljedeću strukturu:

Empire burleska Bob dylan SAD Kolumbija 10.90 1985 Sakrij svoje srce Bonnie Tylor UK CBS Records 9.90 1988 ... Oslobodi mi srce Joe Cocker SAD EMI 8.20 1987

Sada smo spremni početi gledati XML DOM objektni model, počevši od XMLDOMDocument objekta.

XML dokument - XMLDOMDocument objekt

Rad s XML dokumentom počinje njegovim učitavanjem. Da bismo to učinili, koristimo metodu Load koja ima samo jedan parametar koji određuje URL učitanog dokumenta. Prilikom učitavanja datoteka s lokalnog diska navodi se samo puni naziv datoteke (datoteka: /// protokol se u ovom slučaju može izostaviti). Ako je XML dokument pohranjen kao niz, upotrijebite metodu LoadXML za učitavanje dokumenta.

Svojstvo Async koristi se za kontrolu načina na koji se dokument učitava (sinkrono ili asinkrono). Prema zadanim postavkama, ovo je svojstvo postavljeno na True, što znači da se dokument učitava asinkrono i kontrola se vraća aplikaciji prije nego što se dokument potpuno učita. U suprotnom, dokument se učitava sinkrono, a zatim morate provjeriti vrijednost svojstva ReadyState kako biste saznali je li dokument učitan ili ne. Također možete stvoriti rukovatelj za događaj OnReadyStateChange koji će preuzeti kontrolu kada se promijeni vrijednost svojstva ReadyState.

Sljedeće pokazuje kako učitati XML dokument pomoću metode Load:

Koristi ... MSXML_TLB ... proceduru TForm1.Button1Click (Pošiljatelj: TObject); var XMLDoc: IXMLDOMDocument; započeti XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = Netočno; XMLDoc.Load (‘C: \ DATA \ DATA.xml’); // // Ovdje je kod koji manipulira // XML dokumentom i njegovim granama // XMLDoc: = Nil; kraj;

Nakon što se dokument učita, možemo pristupiti njegovim svojstvima. Dakle, svojstvo NodeName sadržavat će vrijednost #document, svojstvo NodeTypeString će sadržavati vrijednost dokumenta, a svojstvo URL-a će sadržavati datoteku: /// C: /DATA/DATA.xml vrijednost.

Rukovanje pogreškama

Posebno su zanimljiva svojstva vezana za obradu dokumenata pri utovaru. Na primjer, svojstvo ParseError vraća XMLDOMParseError objekt koji sadrži informacije o pogrešci koja se dogodila tijekom obrade dokumenta.

Za pisanje rukovatelja pogreškama možete dodati sljedeći kod:

Var XMLError: IXMLDOMParseError; ... XMLDoc.Load (‘C: \ DATA \ DATA.xml’); XMLError: = XMLDoc.ParseError; Ako XMLError.ErrorCode<>0 Zatim // // Ovdje obrađujemo pogrešku // Else Memo1.Lines.Add (XMLDoc.XML); ... XMLDoc: = Ništa;

Da biste saznali koje se informacije vraćaju u slučaju pogreške, promijenite sljedeći unos direktorija:

Empire burleska Bob dylan SAD Kolumbija 10.90 1985

uklanjanje elementa za zatvaranje u drugom redu:</p><p> <CD> <TITLE>Empire burleska <ARTIST>Bob dylan</ARTIST> <COUNTRY>SAD</COUNTRY> <COMPANY>Kolumbija</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> </p><p>Sada napišimo kod koji vraća vrijednosti svojstva objekta XMLDOMParseError:</p><p>XMLError: = XMLDoc.ParseError; Ako XMLError.ErrorCode<>0 Zatim s XMLError, Memo1.Lines počinje Add ('Datoteka:' + URL); Dodaj ('Kôd:' + IntToStr (ErrorCode)); Dodaj ('Pogreška:' + Razlog); Dodaj ('Tekst:' + SrcText); Dodaj ('Line:' + IntToStr (Line)); Dodaj ('Pozicija:' + IntToStr (LinePos)); end Else Memo1.Lines.Add (XMLDoc.XML); Kraj;</p><p>i izvršiti našu aplikaciju. Kao rezultat, dobivamo sljedeće informacije o pogrešci.</p> <p>Kao što možete vidjeti iz gornjeg primjera, informacije koje vraća objekt XMLDOMParseError sasvim su dovoljne da lokaliziraju pogrešku i razumiju uzrok njezine pojave.</p> <p>Sada ćemo vratiti element za zatvaranje <TITLE>u našem dokumentu i nastavite našu raspravu o XML DOM-u.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Pristup stablu dokumenta</h2> <p>Da biste pristupili stablu dokumenta, možete ili dobiti korijenski element, a zatim iterirati njegove podređene grane ili pronaći određenu granu. U prvom slučaju korijenski element dobivamo kroz svojstvo DocumentElement, koje vraća objekt tipa XMLDOMNode. Evo kako koristiti svojstvo DocumentElement za dobivanje sadržaja svakog podređenog elementa:</p><p>Var čvor: IXMLDOMNode; Korijen: IXMLDOMElement; I: cijeli broj; ... Korijen: = XMLDoc.DocumentElement; Za I: = 0 do Root.ChildNodes.Length-1 do Početni čvor: = Root.ChildNodes.Item [I]; Memo1.Lines.Add (Čvor.Tekst); Kraj;</p><p>Za naš XML dokument dobivamo sljedeći tekst.</p> <p>Ako nas zanima određena grana ili grana ispod prve podređene grane, možemo koristiti metodu NodeFromID ili metodu GetElementByTagName objekta XMLDOMDocument.</p> <p>Metoda NodeFromID zahtijeva jedinstveni identifikator kako je definirano u XML shemi ili definiciji tipa dokumenta (DTD) i vraća granu s tim identifikatorom.</p> <p>Metoda GetElementByTagName zahtijeva niz s određenim elementom (oznakom) i vraća sve grane s ovim elementom. Evo kako upotrijebiti ovu metodu da pronađete sve izvođače u našem CD-ROM imeniku:</p><p>Čvorovi: IXMLDOMNodeList; Čvor: IXMLDOMNode; ... Čvorovi: = XMLDoc.GetElementsByTagName (‘UMJETNIK’); Za I: = 0 do Čvorova.Dužina-1 do Početni čvor: = Čvorovi.Stavka [I]; Memo1.Lines.Add (Čvor.Tekst); Kraj;</p><p>Za naš XML dokument dobit ćemo sljedeći tekst</p> <p>Imajte na umu da metoda SelectNodes objekta XMLDOMNode pruža fleksibilniji način pristupa granama dokumenta. Ali više o tome u nastavku.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Grana dokumenta - XMLDOMNode objekt</h2> <p>Objekt XMLDOMNode predstavlja granu dokumenta. Već smo naišli na ovaj objekt kada smo dobili korijenski element dokumenta:</p><p>Korijen: = XMLDoc.DocumentElement;</p><p>Da biste dobili informacije o grani XML dokumenta, možete koristiti svojstva objekta XMLDOMNode (Tablica 1).</p> <p>Za pristup podacima pohranjenim u grani, uobičajeno je koristiti svojstvo NodeValue (dostupno za atribute, tekstualne grane, komentare, upute za obradu i CDATA odjeljke) ili svojstvo Text, koje vraća tekstualni sadržaj grane, ili svojstvo NodeTypedValue. Potonje se, međutim, može koristiti samo za grane s upisanim stavkama.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>Kretanje po stablu dokumenta</h3> <p>Objekt XMLDOMNode pruža mnogo načina za navigaciju stablom dokumenta. Na primjer, za pristup roditeljskoj grani koristite svojstvo ParentNode (tip XMLDOMNode), pristupite podređenim granama kroz svojstva ChildNodes (tip XMLDOMNodeList), FirstChild i LastChild (tip XMLDOMNode), itd. Svojstvo OwnerDocument vraća XMLDOMDocument objekt koji identificira sam XML dokument. Gore navedena svojstva olakšavaju navigaciju stablom dokumenta.</p> <p>Sada prođimo kroz sve grane XML dokumenta:</p><p>Korijen: = XMLDoc.DocumentElement; Za I: = 0 do Root.ChildNodes.Length-1 do Početni čvor: = Root.ChildNodes.Item [I]; Ako Node.HasChildNodes onda GetChilds (Čvor, 0); Kraj;</p><p>Kao što je gore navedeno, SelectNodes objekta XMLDOMNode pruža fleksibilniji način pristupa granama dokumenta. Osim toga, postoji metoda SelectSingleNode koja vraća samo prvu granu dokumenta. Obje ove metode omogućuju vam definiranje XSL predložaka za pretraživanja grana.</p> <p>Pogledajmo postupak korištenja metode SelectNodes za dohvaćanje svih grana koje imaju granu CD-a i podgranu PRICE:</p><p>Korijen: = XMLDoc.DocumentElement; Čvorovi: = Root.SelectNodes (‘CD / PRICE’);</p><p>Sve PRICE podgrane CD grane bit će smještene u zbirku Čvorovi. Vratit ćemo se na raspravu o XSL predlošcima malo kasnije.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>Manipuliranje podređenim granama</h3> <p>Za manipuliranje podređenim granama možemo koristiti metode objekta XMLDOMNode (tablica 2).</p> <p>Da biste u potpunosti izbrisali zapis o prvom disku, morate pokrenuti sljedeći kod:</p><p>Var XMLDoc: IXMLDOMDocument; Korijen: IXMLDOMNode; Čvor: IXMLDOMNode; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = Netočno; XMLDoc.Load (‘C: \ DATA \ DATA.xml’); // Dobivanje korijenskog elementa Root: = XMLDoc.DocumentElement; Čvor: = korijen; // Uklonite prvu podređenu granu Node.RemoveChild (Node.FirstChild);</p><p>Imajte na umu da u ovom primjeru brišemo prvu podređenu granu. Kako ukloniti prvi element prve podređene grane prikazano je u nastavku:</p><p>Var XMLDoc: IXMLDOMDocument; Korijen: IXMLDOMNode; Čvor: IXMLDOMNode; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = Netočno; XMLDoc.Load (‘C: \ DATA \ DATA.xml’); // Dobivanje korijenskog elementa Root: = XMLDoc.DocumentElement; // i prva podređena grana Čvor: = Root.FirstChild; // Uklonite prvu podređenu granu Node.RemoveChild (Node.FirstChild);</p><p>U gornjem primjeru izbrisali smo ne prvu granu <CD>…</CD> a prvi element grane je <TITLE>….

Sada dodajmo novu granu. Ispod je kod koji pokazuje kako dodati novi glazbeni CD-ROM unos:

Var NewNode: IXMLDOMNode; Dijete: IXMLDOMNode; ... // Kreiraj novu granu - Novi čvor: = XMLDoc.CreateNode (1, ‘CD’, ‘’); // Dodaj element Dijete: = XMLDoc.CreateNode (1, ‘TITLE’, ‘’); // Dodaj element NewNode.AppendChild (Child); // I postavite njegovu vrijednost Child.Text: = 'Pink Floyd'; // Dodaj element <ARTIST>Dijete: = XMLDoc.CreateNode (1, ‘UMJETNIK’, ‘’); // Dodaj element NewNode.AppendChild (Child); // I postavite njegovu vrijednost Child.Text: = 'Division Bell'; // Dodaj element <COUNTRY>Dijete: = XMLDoc.CreateNode (1, ‘DRŽAVA’, ‘’); // Dodaj element NewNode.AppendChild (Child); // I postavite njegovu vrijednost Child.Text: = 'UK'; // Dodaj element <COMPANY>Dijete: = XMLDoc.CreateNode (1, ‘COMPANY’, ‘’); // Dodaj element NewNode.AppendChild (Child); // I postavite njegovu vrijednost Child.Text: = ‘EMI Records Ltd.’; // Dodaj element <PRICE>Dijete: = XMLDoc.CreateNode (1, ‘CIJENA’, ‘’); // Dodaj element NewNode.AppendChild (Child); // I postavite njegovu vrijednost Child.Text: = '11 .99 "; // Dodajte element <YEAR>Dijete: = XMLDoc.CreateNode (1, ‘GODINA’, ‘’); // Dodaj element NewNode.AppendChild (Child); // I postavite njegovu vrijednost Child.Text: = ‘1994’; // I dodaj granu Root.AppendChild (NewNode); ...</p><p>Gornji kod pokazuje sljedeći slijed koraka za dodavanje nove grane:</p> <ul><li>Izrada nove grane metodom CreateNode: <ul><li>stvaranje elementa metodom CreateNode;</li> <li>dodavanje elementa u granu pomoću metode AppendChild;</li> <li>postavljanje vrijednosti elementa kroz svojstvo Text;</li> <li>… Ponovite za sve elemente.</li> </ul></li> <li>Dodavanje nove grane u dokument pomoću metode AppendChild.</li> </ul><p>Podsjetimo da metoda AppendChild dodaje granu na kraj stabla. Da biste dodali granu na određeno mjesto u stablu, trebate koristiti metodu InsertBefore.</p> <h2>Skup grana - XMLDOMNodeList objekt</h2> <p>Objekt XMLNodeList sadrži popis grana koje se mogu izgraditi pomoću metoda SelectNodes ili GetElementsByTagName, a također se mogu dobiti iz svojstva ChildNodes.</p> <p>Već smo raspravljali o korištenju ovog objekta u primjeru koji je dat u odjeljku "Navigacija stablom dokumenta". Ovdje ćemo dati neke teorijske komentare.</p> <p>Broj grana na popisu može se dobiti kao vrijednost svojstva Length. Grane su indeksirane od 0 do Length-1, a svaka pojedina grana dostupna je putem odgovarajuće indeksirane stavke u polju Item.</p> <p>Kretanje kroz popis grana također se može obaviti pomoću metode NextNode, koja vraća sljedeću granu na popisu, ili Nil ako je trenutna grana posljednja. Za povratak na vrh popisa pozovite metodu Reset.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Kreirajte i spremajte dokumente</h2> <p>Dakle, pokrili smo kako možete dodati grane i elemente postojećim XML dokumentima. Sada napravimo XML dokument u hodu. Prije svega, zapamtite da se dokument može učitati ne samo iz URL-a, već i iz običnog niza. Evo kako stvoriti korijenski element, koji se zatim može koristiti za dinamičku izgradnju ostalih elemenata (što smo već pokrili u odjeljku Manipuliranje podređenim granama):</p><p>Var XMLDoc: IXMLDOMDocument; Korijen: IXMLDOMNode; Čvor: IXMLDOMNode; S: WideString; ... S: = ‘ <CATALOG></CATALOG>'; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = Netočno; XMLDoc.LoadXML (S); Korijen: = XMLDoc.DocumentElement; Čvor: = XMLDoc.CreateNode (1, ‘CD’, ‘’); Root.AppendChild (čvor); Memo1.Lines.Add (XMLDoc.XML); ... XMLDoc: = Ništa;</p><p>Nakon izrade XML dokumenta, spremite ga u datoteku metodom Save. Na primjer:</p> <p>XMLDoc.Save ('C: \ DATA \ NEWCD.XML');</p> <p>Osim spremanja u datoteku, metoda Save omogućuje spremanje XML dokumenta u novi XMLDOMDocument objekt. U tom se slučaju dokument u potpunosti obrađuje i, kao rezultat, provjerava se njegova struktura i sintaksa. Evo kako spremiti dokument u drugi objekt:</p><p>Postupak TForm1.Button2Click (Pošiljatelj: TObject); var XMLDoc2: IXMLDOMDocument; započeti XMLDoc2: = CoDOMDocument.Create; XMLDoc.Spremi (XMLDoc2); Memo2.Lines.Add (XMLDoc2.XML); ... XMLDoc2: = Ništa; kraj;</p><p>Zaključno, metoda Save također vam omogućuje spremanje XML dokumenta u druge COM objekte koji podržavaju sučelja IStream, IPersistStream ili IPersistStreamInit.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Korištenje XSL predložaka</h2> <p>Kada smo raspravljali o metodi SelectNodes objekta XMLDOMNode, spomenuli smo da ona pruža fleksibilniji način pristupa granama dokumenta. Fleksibilnost je u tome što možete odrediti XSL predložak kao kriterij za odabir grana. Takvi predlošci pružaju moćan mehanizam za pronalaženje informacija u XML dokumentima. Na primjer, da biste dobili popis svih naslova glazbenih CD-ROM-a u našem imeniku, možete pokrenuti sljedeći upit:</p><p>Kako biste saznali koji diskovi izvođača izlaze u SAD-u, zahtjev se formira na sljedeći način:</p><p>Čvorovi: = Root.SelectNodes (‘CD / ARTIST’);</p><p>Evo kako pronaći prvi pogon u direktoriju:</p><p>Čvorovi: = Root.SelectNodes (‘CD / TITLE’);</p><p>I zadnji:</p><p>Čvorovi: = Root.SelectNodes (‘CD / TITLE’);</p><p>Da biste pronašli diskove Boba Dylana, možete pokrenuti sljedeći upit:</p><p>Čvorovi: = Root.SelectNodes (‘CD [$ bilo koji $ ARTIST =” Bob Dylan ”] / TITLE’);</p><p>i da bismo dobili popis diskova napravljenih nakon 1985., pokrećemo sljedeći upit:</p><p>Čvorovi: = Root.SelectNodes (‘CD / TITLE’);</p><p>Detaljnija rasprava o XSL sintaksi zahtijeva zasebnu publikaciju. Kako bih zaintrigirao čitatelje i potaknuo daljnja istraživanja, navest ću samo jedan mali primjer moguće upotrebe XSL-a. Recimo da trebamo pretvoriti naš katalog u običnu HTML tablicu. Koristeći tradicionalne metode, moramo iterirati sve grane stabla i za svaki primljeni element formirati odgovarajuće oznake <TD>…</TD>.</p> <p>Koristeći XSL, jednostavno stvaramo predložak (ili stylesheet) koji određuje što i kako transformirati. Zatim prekrivamo ovaj predložak na naš katalog - i gotovi ste: imamo tekst XSL predloška koji pretvara katalog u tablicu (listing 2).</p> <p>Kod za prekrivanje XSL predloška u našem imeniku izgleda ovako:</p><p>Postupak TForm1.Button2Click (Pošiljatelj: TObject); var XSLDoc: IXMLDOMDocument; započeti XSLDoc: = CoDOMDocument.Create; XSLDoc.Load (‘C: \ DATA \ DATA.xsl’); Memo2.Text: = XMLDoc.TransformNode (XSLDoc); XSLDoc: = Ništa; kraj;</p><p>Zaključujući našu raspravu o XSL-u, treba reći da se ovaj jezik trenutno aktivno koristi za transformaciju između različitih XML dokumenata, kao i za formatiranje dokumenata.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Zaključak</h2> <p>Iz očitih razloga, nemoguće je pokriti sve Microsoft XML DOM objekte i dati primjere njihove uporabe u jednom članku. Ovdje smo se upravo dotakli osnovnih pitanja korištenja XML DOM-a u aplikacijama. Stol 3 prikazuje sve objekte implementirane u Microsoft XML DOM.</p> <p>Computer Press 12 "2000</p> <p>Za mnoge Delphi programere, spremanje postavki povezano je s korištenjem <i>INI</i> datoteke u svojim programima. Korištenje ove metode, u manje ili više ozbiljnim projektima, treba izbjegavati, jer ograničava fleksibilnost, što onemogućuje daljnje širenje programa. Treba reći da je ovaj pristup prilično popularan zbog svoje jednostavnosti korištenja i prisutnosti ugrađenih alata u razvojnom okruženju. <br><br>Međutim, strukturirano <i>XML</i> datoteke. Njihova prednost je što broj parametara možda nije fiksiran. Da biste to bolje razumjeli, razmotrite konkretan primjer.</p><p>U programu USearch, kada kliknete na unos, pojavljuje se kontekstni izbornik u kojem se prikazuje popis stavki. Ove stavke su naredbe, koje se zauzvrat učitavaju iz datoteke postavki. U slučaju da su postavke pohranjene u <i>INI</i> datoteku, tada bi program mogao spremiti i učitati određeni broj naredbi, na primjer 10 ili 50. Čim je potrebna veća vrijednost, morat ćete ponovno napisati kod i prema tome ga ponovno kompajlirati.</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>Primjena pristupa koristeći <i>XML</i> datoteke, moći ćemo dinamički učitavati sve parametre odjeljka. Osim toga, konfiguracijska datoteka postat će elegantnija, bez suvišnog numeriranja parametara. Međutim, standardni alati za rad s <i>XML</i> Delphi ima mnogo nedostataka, pa preporučujem korištenje standardne biblioteke <b>MSXML</b>... Obično je uključen prema zadanim postavkama s operativnim sustavima obitelji 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>Povezivanje <b>MSXML</b>, moramo generirati datoteku sučelja s popisom svih funkcija uvozom s COM poslužitelja. Napisano je mnogo detaljnih članaka o tome kako uvesti sučelje, ali predlažem da preuzmete datoteku <b>MSXML2_TLB.PAS</b> spremno za uporabu. Nakon što se datoteka preuzme, stavite je pored svog projekta ili je ispustite u mapu lib okruženja Delphi. Tako će svi kreirani programi moći koristiti modul <b>MSXML</b>, samo trebate dodati redak MSXML2_TLB u upotrebu.</p><p>Radi jasnoće, razmotrite sljedeći primjer korištenja ove biblioteke:</p><p>Procedure LoadData; var XMLDoc: DOMDocument; Korijen: IXMLDOMElement; započeti XMLDoc: = CoDOMDocument.Create; XMLDoc.Load ("settins.xml"); Korijen: = XMLDoc.DocumentElement; ShowMessage (Root.SelectSingleNode ("veličina / širina"). Tekst); Korijen: = nula; XMLDoc: = nula; kraj;</p><p>Prvo se kreira instanca klase DOMDocument, a zatim se sadržaj datoteke settings.xml učitava u memoriju. Budući da, prema standardu, bilo koji <i>XML</i> datoteka mora sadržavati root oznaku (u ovom slučaju <i>konfig</i>), onda ga moramo dobiti pomoću funkcije <i>DocumentElement</i>... Zatim se sadržaj prikazuje između oznaka. <width></width>, koji se pak nalaze između oznaka <size></size>... Dakle, iz datoteke settings.xml, naša metoda će prikazati tekst u MessageBoxu <i>"100px"</i>.</p><p> <?xml version="1.0" encoding="utf-8"?> <config> <size> <height>500px</height> <width>100px</width> </size> </config> </p><p>Ovdje se primjenjuje metoda SelectSingleNode, koja uzima niz kao parametar</p> <p>NARUČITE RJEŠENJE PROBLEMA NA DELPHI <br>Delphi je drugi najvažniji programski jezik s kojim se studenti najčešće upoznaju u procesu učenja. Ovo je početak učenja o objektno orijentiranom programiranju. Kao student došao sam do zaključka da ne postoji lakši način učenja jezika nego da se na njemu napiše kalkulator. Čak i ako implementirate rudimentarnu funkciju za zbrajanje dva broja, to će baciti puno svjetla na to.</p> <p>CodeGaear, Delphi 7, Lazarus su različiti prevodioci, programi koji će prenijeti kod koji napišete na stroj, pretvarajući ga u jedinice i one. Sve su to programi za kreiranje programa, a ne zasebni programski jezici. Ovi prevoditelji koriste programski jezik Object Pascal, koji je osnova Delphi jezika, koji je po sintaksi sličan običnom Pascalu, ali se funkcionalno značajno razlikuje. <br></p> <h2>Koja je sintaksa programskog jezika?</h2> <p>Ovo je format za pisanje raznih operatora. Na primjer, Pascal "for" petlja ima sljedeći format: "for n: = 1 do k do" i tako dalje.</p><p>U programskom jeziku C ++, ista petlja je napisana malo drugačije: za (n = 1; n Pišemo kalkulator</p><p>To će vam dati razumijevanje o tome kako objekti komuniciraju s programskim kodom, što su "varijable" i kako rade matematičke funkcije. Svako će programiranje ionako biti računanje. Igra je također program koji stalno nešto izračunava, radi s brojevima i brojčanim funkcijama. Programiranje je neodvojivo od matematike.</p> <p>Koristimo Lazarus razvojno okruženje za pisanje. Funkcionalnost mu nije tako bogata kao recimo CodeGear, ali je slobodno dostupna i namijenjena je treningu.</p><p>Otvarajući razvojno okruženje, vidimo formu i alatni okvir. Ovdje je obrazac.</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>Ovdje je kutija s alatima.</p><p>Prvo što ćemo učiniti je dodati tri elementa koja su nam potrebna za implementaciju funkcije za zbrajanje dva broja. Trebamo: "Tedit" u količini od tri komada i "TButton". Na donjoj slici prikazani su na ploči sa strelicama. Jednom kliknemo na njih, pa jednom na obrazac i oni se pojavljuju na njemu.</p><p>To su tekstualna polja za unos i običan gumb. Na ove elemente nailazite koristeći gotovo svaki Windows program. Pogledaj.</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>Sada počistimo ove naljepnice. Kliknite karticu "Prikaz". I kliknite na stavku "Inspektor objekata. Pojavit će se ovakav prozor.</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>Kliknemo jednom na naš element "Button" na obrascu i promijenimo vrijednost "Caption" u prozoru inspektora u bilo koju drugu. Na primjer, riječ "U redu". Pritisnemo Enter. Na obrascu vidimo kako je element promijenio ime.</p><p>Isto ćemo napraviti i s Editovim, samo što nećemo preimenovati, nego ćemo ih napraviti bez ikakvog sadržaja. Odaberite ih redom i izbrišite vrijednost Text u inspektoru. Ne zaboravite pritisnuti 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>Kao rezultat, naš obrazac izgleda ovako.</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>Sada, da bi naš kalkulator radio, trebate napisati potreban programski kod za postupak našeg gumba. Dvaput kliknite na element Button i otvorite izvorni uređivač.</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>Vidjeti? Postupak Button1Klik. To je postupak koji je odgovoran za ono što se događa kada jednom kliknemo na gumb. A trebalo bi se dogoditi sljedeće: program treba prikazati zbroj brojeva unesenih u prva dva polja u trećem Editu. Pišemo kod.</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>Moramo napisati tako jednostavnih 5 redaka koda. Komentari i objašnjenja se mogu vidjeti na gornjoj slici. Nakon toga, pritisnemo ovaj gumb.</p> <p>Naš projekt će biti sastavljen. Bit će sastavljen u program. U prva dva polja unosimo brojeve, kliknemo na gumb i dobijemo vrijednost zbroja.</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čak</h2> <p>Možete kliknuti gumb "Datoteka", zatim "Spremi sve", odabrati mapu za spremanje i imat ćete punopravni program koji se može pokrenuti s radne površine. Sada pokušajte sami shvatiti što trebate prepisati u ovom kodu tako da program dijeli dva broja, a ne zbraja. Savjet: trebate promijeniti vrstu podataka. Video ispod prikazuje sličan primjer, ali u okruženju Delphi 7, a ne Lazarus.</p><p><span class="6qR5tjJKK3g"></span></p> <p>U posljednje vrijeme velika se pozornost posvećuje izgradnji sustava e-poslovanja, ili kako ih još zovu – B2B (business to business). Uzimajući u obzir preporuke o izgradnji sustava prijenosa razmjene podataka koordinacionog tijela internetskih tehnologija - WWW Consortium: naglasak je na XML tehnologijama i izgradnji sustava za razmjenu XML dokumenata.</p> <p>Prednost korištenja XML-a u e-poslovanju je visoka učinkovitost B2B sustava uz niske troškove za njegovu izradu zbog jasne i vizualne prezentacije strukturiranih informacija, mogućnosti korištenja suvremenih mrežnih protokola i kreiranja poslovnih sustava u stvarnom vremenu.</p> <p>Neovisnost prezentacije informacija u obliku XML dokumenata omogućuje različitim tvrtkama uključenim u e-poslovanje da proizvode softver neovisno jedna o drugoj.</p> <p>U svim sustavima, razmjena se u pravilu gradi prema istoj shemi, koristeći HTTP zahtjeve. SSL se koristi kao protokol za informacijsku sigurnost (ali ovo je posebna tema).</p> <p>Jedna od mogućih opcija za obradu XML poruka je izgradnja BIN/CGI (ISAPI) aplikacija ili COM (poslužiteljskih) komponenti koje generiraju ili obrađuju XML dokumente.</p> <p>S jedne strane, aplikacija djeluje kao klijent, koji izdaje HTTP zahtjev u POST načinu rada, s druge strane se nalazi WEB poslužitelj na čijoj strani se obrađuje zahtjev i izdaje odgovor. Razmjena informacija koristi XML dokumente.</p> <p>Jedna od najučinkovitijih opcija implementacije je korištenje postojećeg XML parsera koji podržava DOM model. Takav parser je distribucijski paket Win'98 ili sastavni dio IE 4.7 i noviji (za Win'95) i predstavlja COM poslužitelj koji se nalazi u biblioteci msxml.dll.</p> <p>Komponentni objektni model (COM) – Predstavlja inkapsulirane podatke i metode u jednu cjelinu i način da im se pristupi putem sustava sučelja. Koristeći Delphi alate, prilično je lako pristupiti klasama COM objekta (nekoliko klasa može biti uključeno u jedan COM poslužitelj). Objektima se pristupa inicijalizacijom instance klase kroz sustav sučelja. Opis sučelja provodi se jezikom definicije sučelja (IDL), koji se može izvesti pomoću okoline automatski.</p> <p>Delphi alati se koriste za uvoz s COM poslužitelja <i>msxml.dll</i>, izgrađene su datoteke za opis IDL sučelja i datoteka za binarni opis tipova knjižnica - TLB. Ova se operacija izvodi putem izbornika sustava: <b>Projekt | Vrsta Uvoz biblioteke:</b>(slika 1). Zatim se pojavljuje dijaloški okvir (slika 2) u kojem trebate odabrati COM objekt (u našem slučaju objekt je registriran pod imenom "Microsoft.XMLDom (verzija 2.0)") i kreirati TLB datoteku (gumb <b>Napravite jedinicu</b>). Koristeći TLB datoteku, okvir generira datoteku opisa COM poslužitelja "Pascal" - MSXML_TLB.pas</p> <p>Datoteka MSXML_TLB.pas opisuje sva sučelja, konstante i koklase COM poslužitelja.</p> <p>Za pristup objektima COM elementa potrebna vam je direktiva <b>UPORABA</b> dodajte naziv datoteke opisa knjižnice (MSXML_TLB.pas). Ispod je jednostavan program koji koristi standardni DOM parser msxml.dll, koji učitava XML dokument i prikazuje ga u elementu tekstualnog polja Memo1.</p> <b>koristi</b> Windows, poruke, SysUtils, klase, grafika, kontrole, obrasci, dijalozi, OleServer, MSXML_TLB, StdCtrls; <b>tip</b> TForm1 = <b>razreda</b>(TForm) Button1: TButton; Memo1: TMemo; <b>postupak</b> Button1Click (Pošiljatelj: TObject); <b>kraj;</b> <b>var</b> Obrazac1: TForm1; <b>provedba</b>($ R * .DFM) <b>Postupak</b> TForm1.Button1Click (Pošiljatelj: Tobject); <span>// deklaracija soklase objekta DOMDocument;</span> <b>var</b> coDoc: CoDOMDocument; <span>// klasa u skladu sa sučeljem IDOMDocument;</span> <b>var</b> Dokument: IXMLDOMDocument; <b>početi</b> <span>// stvoriti instancu objekta DOMDocument;</span> Dokument: = coDoc.Create; <span>// pozivanje metode Load instance objekta DOMDocument;</span> Doc.load ("data.xml"); <span>// pristup svojstvu xml instance DOMDocument;</span> Memo1.Text: = Doc.xml; <b>kraj;</b> <b>kraj.</b> <h2>DOM koncept - Model objekta dokumenta</h2> <p>Svaki XML dokument predstavljen je kao skup više objekata (klasa), uz pomoć kojih je moguće pristupiti pojedinim elementima (poljima objekta). DOM - sučelje opisuje pristup kako jednostavnim objektima tipa DOMString ili CharacterData, tako i dijelovima ili pojedinačnim elementima XML dokumenta: DOMFragmentElement, DOMNode, DOMElement.</p> <p>Slijede najvažnija svojstva i metode objekata XMLDOMDocument, XMLDOMNode, XMLDOMNodeList. Treba napomenuti da metode i funkcije DOM objekata prikazanih u nastavku (Document Object Model) koristi Microsoft XML parser msxml.dll i nešto su šire od DOM modela koji je odobrio W3C Consortium.</p> <p>Potpuniji opis sučelja DOM objekta može se pronaći 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šu razinu hijerarhije objekata i sadrži metode za rad s dokumentom: njegovo učitavanje, analizu, stvaranje elemenata, atributa, komentara itd. ...</td> </tr><tr><td valign="top" colspan="2"><b>Svojstva</b> </td> </tr><tr><td valign="top" width="39%"><b>Async</b> </td> <td valign="top" width="61%">Svojstvo koje identificira trenutni način obrade</td> </tr><tr><td valign="top" width="39%" height="19"><b>ParseError</b> </td> <td valign="top" width="61%" height="19">Vraća referencu na objekt rukovanja pogreškama XMLDOMParseError</td> </tr><tr><td valign="top" width="39%"><b>Omogući - onemogući provjeru dokumenta.</b> </td> <td> </td> </tr><tr><td valign="top" width="39%"><b>url</b> </td> <td valign="top" width="61%">Vraća URL dokumenta</td> </tr><tr><td valign="top" width="39%"><b>documentElement</b> </td> <td valign="top" width="61%">Sadrži referencu na korijenski element dokumenta kao XMLDOMElement objekt.</td> </tr><tr><td valign="top" colspan="2"><b>Metode</b> </td> </tr><tr><td valign="top" width="39%"><b>učitavanje (url) <br>loadXML (xmlString)</b> </td> <td valign="top" width="61%">Učitava XML dokument,</td> </tr><tr><td valign="top" width="39%"><b>spremi (objTarget)</b> </td> <td valign="top" width="61%">Sprema XML dokument u datoteku</td> </tr><tr><td valign="top" width="39%"><b>prekid</b> </td> <td valign="top" width="61%">Prekid procesa učitavanja i obrade dokumenta.</td> </tr><tr><td valign="top" width="39%"><b>createAtribute (ime)</b> </td> <td valign="top" width="61%">Stvara novi atribut s navedenim imenom za trenutni element.</td> </tr><tr><td valign="top" width="39%"><b>createNode (vrsta, naziv, nameSpaceURI)</b> </td> <td valign="top" width="61%">Stvara čvor navedenog tipa i imena</td> </tr><tr><td valign="top" width="39%"><b>createElement (tagName)</b> </td> <td valign="top" width="61%">Stvara element dokumenta s navedenim imenom.</td> </tr><tr><td valign="top" width="39%"><b>createTextNode (podaci)</b> </td> <td valign="top" width="61%">Stvara tekst unutar dokumenta</td> </tr><tr><td valign="top" width="39%"><b>getElementsByTagName (ime oznake)</b> </td> <td valign="top" width="61%">Vraća referencu na zbirku elemenata dokumenta s danim imenom</td> </tr><tr><td valign="top" width="39%"><b>nodeFromID (idString)</b> </td> <td valign="top" width="61%">Pronađite element po ID-u</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 koji implementira temeljno DOM sučelje <b>Čvor</b>, namijenjen je za manipulaciju s zasebnim čvorom stabla dokumenta. Njegova svojstva i metode omogućuju vam da dobijete i promijenite potpune informacije o trenutnom čvoru - njegovu vrstu, naziv, puno ime, njegov sadržaj, popis podređenih elemenata itd.</td> </tr><tr><td valign="top" colspan="2"><b>Svojstva</b> </td> </tr><tr><td valign="top" width=" "><b>ime čvora, ime baze</b> </td> <td valign="top" width="65%">Vraća naziv trenutnog čvora.</td> </tr><tr><td valign="top" width="35%"><b>prefiks</b> </td> <td valign="top" width="65%">Vraća prefiks prostora imena.</td> </tr><tr><td valign="top" width="35%"><b>vrsta podataka</b> </td> <td valign="top" width="65%">Određuje vrstu sadržaja trenutnog čvora</td> </tr><tr><td valign="top" width="35%"><b>nodeType, nodeTypeString</b> </td> <td valign="top" width="65%">Vraća vrstu trenutnog čvora:</td> </tr><tr><td valign="top" width="35%"><b>atributima</b> </td> <td valign="top" width="65%">Dobiva popis atributa trenutnog čvora kao zbirke XMLDOMNamedNodeMap.</td> </tr><tr><td valign="top" width="35%"><b>tekst</b> </td> <td valign="top" width="65%">Vraća sadržaj trenutnog podstabla kao tekst</td> </tr><tr><td valign="top" width="35%"><b>xml</b> </td> <td valign="top" width="65%">Vraća XML prikaz trenutnog podstabla.</td> </tr><tr><td valign="top" width="35%"><b>nodeValue</b> </td> <td valign="top" width="65%">Vraća sadržaj trenutnog čvora.</td> </tr><tr><td valign="top" width="35%"><b>dječji čvorovi</b> </td> <td valign="top" width="65%">Vraća popis podređenih elemenata kao XMLDOMNodeList.</td> </tr><tr><td valign="top" width="35%"><b>firstChild, lastChild</b> </td> <td valign="top" width="65%">Vraća prvo/zadnje dijete</td> </tr><tr><td valign="top" width="35%"><b>prethodni brat, sljedeći brat</b> </td> <td valign="top" width="65%">Vraća prethodni/sljedeći brat ili sestru.</td> </tr><tr><td valign="top" width="35%"><b>parentNode</b> </td> <td valign="top" width="65%">Sadrži vezu na roditeljski element.</td> </tr><tr><td valign="top" width="35%"><b>Vlasnički dokument</b> </td> <td valign="top" width="65%">Vraća pokazivač na dokument koji sadrži trenutni čvor.</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%">Dodaje novo dijete trenutnom čvoru.</td> </tr><tr><td valign="top" width="35%"><b>insertBefore (newChild, refChild)</b> </td> <td valign="top" width="65%">Umeće podređeni čvor, pozicionirajući ga u trenutno podstablo lijevo od čvora koji je specificirao refChild.</td> </tr><tr><td valign="top" width="35%"><b>cloneNode (duboko)</b> </td> <td valign="top" width="65%">Stvara kopiju trenutne stavke.</td> </tr><tr><td valign="top" width="35%"><b>getAttribute</b><b>(Ime) <br> </b><b>getAttributeNode</b><b><span>(Ime) <br>setAttribute (ime, vrijednost) <br>setAttributeNode (XMLDOMAttribute)</span> </b> </td> <td valign="top" width="65%">Pristup atributima (kreiranje, čitanje, pisanje) objekta. Naziv je naziv atributa, vrijednost je njegova vrijednost. Vraća vrijednost objekta XMLDOMAttribute.</td> </tr><tr><td valign="top" width="35%"><b>replaceChild (newChild, oldChild) removeChild (oldChild)</b> </td> <td valign="top" width="65%">Zamjena oldChild objekta trenutnog popisa podređenih objekata s newChild. Brisanje oldChild objekta</td> </tr><tr><td valign="top" width="35%"><b>selectNodes (patternString) selectSingleNode (patternString)</b> </td> <td valign="top" width="65%">Vraća objekt XMLDOMNodeList odabran uzorkom pretraživanja ili prvim čvorom</td> </tr><tr><td valign="top" width="35%"><b>transformČvor (stylesheet) <br>transformNodeToObject (stylesheet, outputObject)</b> </td> <td valign="top" width="65%">Dodjeljuje stilski list podstablu trenutnog čvora i vraća niz koji je rezultat obrade. Parametar je referenca na objekt DOMDocument koji sadrži XSL izraze.</td> </tr></tbody></table><br><h2>Korištenje XML-a u poslovanju.</h2> <p>Za jasniju sliku potrebno je objašnjenje i zašto je sve to potrebno da bi se razumjelo kako funkcionira:</p> <p>Prilikom izgradnje B2B ili korporativnog ERP sustava, pri organiziranju razmjene informacija XML dokumenata između poduzeća ili podružnica pr-I koristi se učinkovito provjereni sustav prijenosa informacija baziran na postojećim WEB poslužiteljima preko HTTP protokola.</p> <p>S jedne strane, aplikacija djeluje kao klijent, koji izdaje HTTP zahtjev u POST modu, s druge strane postoji WEB poslužitelj na čijoj strani se obrađuje zahtjev i daje odgovor. XML dokumenti se koriste kao razmjena.</p> <p>Primjerice, u jednostavnom korporativnom ERP sustavu, računovodstvenom programu (ACS Accounting), potrebno je generirati zahtjev za fakturom i poslati ga poslovnici koja ima skladište (ACS Warehouse). AWP Slična izjava o problemu prilikom kreiranja B2B sustava, kada poduzeće A zatraži dostupnost proizvoda (naruči kupnju) od dobavljača B.</p> <p>Poduzeće A i njegov program djeluju kao klijent. Skladište opslužuje dobavljač B, koji ima skladišni kompleks s bazom podataka na SQL poslužitelju. Razmjena se vrši putem korporativnog WEB poslužitelja Dobavljača V.</p> <p>Ispod je sljedeći tipični algoritam razmjene:</p> <br>Slika 3. <ol><li><b>Poduzeće A</b> inicira <b>proces A</b>(narudžba proizvoda), koja djeluje kao WEB klijent.</li><li><b>Proces A</b> generira XML dokument (na primjer, zahtjev za fakturom) i prenosi ga kao POST http zahtjev na WEB poslužitelj pružatelja B. Identifikator resursa aplikacije za obradu koristi se kao URI. URI može biti isti za sve vrste dokumenata ili pojedinačni za svaku vrstu. Sve ovisi o strukturi B2B (WEB) poslužitelja.</li><li>WEB poslužitelj analizira zahtjev i generira poslužitelj <b>Proces B</b> prosljeđivanjem tijela XML dokumenta kao parametra. <br>Proces B pokreće WEB poslužitelj i obrađuje se ili kao ASP stranica, CGI (ISAPI) - aplikacija ili JAVA poslužitelj (poslužiteljska aplikacija)</li><li><b>Proces B</b>- generira zahtjev poslužitelju SQL baze podataka.</li><li>SQL poslužitelj izvodi potrebne operacije u bazi podataka, generira odgovor i vraća ga <b>Proces B</b>.</li><li>Prema odgovoru sa SQL poslužitelja <b>Proces B</b> generira XML dokument (odgovor) i vraća ga kao odgovor na http zahtjev klijentskoj aplikaciji.</li><li>Nadalje, ovisno o situaciji na strani klijenta, ili se formira novi http zahtjev ili se sesija završava.</li> </ol><h2>Nekoliko riječi o organizaciji toka dokumenata.</h2> <p>Opće pravilo za razvoj sustava za razmjenu XML dokumenata je:</p><ul><li><b>Prvo</b>- izrada dijagrama toka elektroničkih dokumenata i njihove strukture;</li><li><b>Drugo</b>- razvoj tablica procesnih funkcija (podprocesa), t.j. koju funkciju s obzirom na koji XML dokument će svaki proces implementirati.</li> </ul><p>Svaki XML dokument, poput HTML dokumenta, mora se sastojati od zaglavlja poruke (informacije zatvorene oznakama) i tijela poruke (za zahtjev, ove informacije su uokvirene oznakama za odgovor na zahtjev). Da bi XML dokument bio dobro oblikovan, potrebno je uokviriti njegova dva sastavna dijela "Naslov" i "Zahtjev" npr. oznakama. Tip tipičnog dokumenta prikazan je u nastavku:</p> <p>Zaglavlje (slika 4), za razliku od HTML dokumenta, mora sadržavati različite vrste servisnih informacija, uključujući podatke o vrsti poslanog dokumenta i procesu njegove obrade. Tijelo dokumenta ulazi u obradu informacija, t.j. sadržaj uokviren oznakama. Treba napomenuti da struktura naslova treba biti ista za sve vrste dokumenata.</p> <p>Za Proces koji pokreće poslužitelj, poželjno je (ali nije nužno) izgraditi algoritam obrade na sljedeći način:</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>Neke temeljne točke pri izradi klijentske strane</h2> <p>Kao što je već objašnjeno, pri izradi XML dokumenta koristi se njegov prikaz u obliku DOM modela. Ispod je primjer Delphi tekstualnog dijela programa za generiranje xml zaglavlja poruke.</p> <b>postupak</b> TThread1.HeaderCreate (Pošiljatelj: Tobject); <b>var</b> <span>// deklaracija klase, potrebna za kreiranje</span> coDoc: CoDomDocument; <span>// XMLDomDocument objekt</span> Dokument: DomDocument; r: IXMLDOMEelement; Čvor: IXMLDOMElement; // DOMText txt: IXMLDOMText; // DOMAttribute attr: IXMLDOMAttribute; <b>početi</b> <span>// stvoriti DOM dokument</span> Dokument: = coDoc.Create; Doc.Set_async (false); <span>// početno pokretanje DOM dokumenta</span> Doc.LoadXML (" <Header/>"); <span>// kreiraj DOMElement (oznaku<<b>pošiljatelj</b>>) </span>Čvor: = Doc.createElement ("Pošiljatelj"); <span>// stvori tekstualni čvor " <b>Typhoon LLC</b>" </span> txt: = Doc.createTextNode ("Typhoon LLC"); <span>// dodjela čvoru<<b>pošiljatelj</b>> vrijednost</span> <span>// tekstualni čvor " <b>Typhoon LLC</b>" </span> Node.appendChild (txt); <span>// dodaj element<<b>pošiljatelj</b>> u korijen dokumenta kao dijete</span> r.appendChild (čvor); <span> <<b>Iz</b>> </span>Čvor: = Doc.createElement ("Od"); txt: = Doc.createTextNode ("http://tayfun.ru/xml/default.asp"); Node.appendChild (txt); r.appendChild (čvor); <span>// slične operacije za oznaku<<b>Do</b>> </span>Čvor: = Doc.createElement ("Za"); txt: = Doc.createTextNode ("http://irbis.ru"); Node.appendChild (txt); r.appendChild (čvor); <span>// kreiraj DOMElement ()</span>Čvor: = Doc.createElement ("TypeDocument"); <span>// kreiranje čvora XMLDOMAttribute</span> Att: = Doc.createAttribute ("Id", "Order"); <span> // <TypeDocument Id="Order"/> </span> Node.appendChild (Att); r.appendChild (čvor); <b>kraj;</b> <p>Treba napomenuti da se deklaracija varijable coDoc: CoDomDocument i Doc: DomDocument, kao i njezino kreiranje metodom Create (Doc: = coDoc.Create;) vrši jednom. Deklaracija varijable nalazi se u odjeljku koji opisuje globalne varijable, a ne u lokalnoj proceduri, kao što je pokazano radi jasnoće u ovom primjeru (tj. jedna globalna varijabla tipa DomDocument po jednom programskom modulu).</p> <p>Rezultat rada gornjeg programa bit će kreirano zaglavlje, primijenjeno na naš primjer xml-dokumenta: prikazano na slici 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 prijenosa informacija u obliku XML dokumenata je u tome što je moguće formirati poruku korištenjem nezavisnih tabličnih struktura u DBMS-u kako na strani primanja tako i na strani odašiljanja. Uz pomoć našeg primjera, pretpostavimo da je potrebno prenijeti informacije o fakturama poduzeća A iz DBMS-a koji ima strukturu prikazanu na slici 6.</p> <p>Za generiranje xml dokumenta koji sadrži fakturu, SQL upit (upit A) u početku se gradi s informacijama o samoj fakturi:</p> <b>IZABERI</b>* IZ Općeg računa <b>GDJE</b> Broj fakture =: br <b>IZABERI</b> Roba, kvaliteta, cijena, HZ_kod <b>IZ</b> Roba <b>GDJE</b> Broj fakture =: br <span>//: num je parametar koji specificira broj fakture.</span> <p>Ispod je dio programa koji generira tijelo xml dokumenta:</p> <b>postupak</b> TThread1.DataBodyCreate (Pošiljatelj: Tobject); <b>var</b> <span>// deklaracija klase i objekta XMLDomDocument</span>// coDoc: CoDomDocument; <span>// mora biti globalno za cijeli modul.</span>// Dokument: DomDocument; <span>// deklarirati objekte DOMElement</span> r: IXMLDOMEelement; // DOMElement; Čvor, čvor2: IXMLDOMElement; Čvor3, Čvor4: IXMLDOMElement; // DOMText txt: IXMLDOMText; str: String; <span>// Broj fakture: <b>cijeli broj;</b>- globalna varijabla - // ima vrijednost 987654 // queryA, queryB: <b>Niz;</b>- globalna varijabla, // ima vrijednost koja odgovara zahtjevu // upitA - zahtjev A s općim podacima o fakturi // upitB - zahtjev B informacije o robi opisanoj u // fakturi (vidi tekst)</span> <b>početi</b> Query.Close; <span>// vidi tekst "zahtjev A"</span> Upit.Tekst: = upitA; <span>// izvršiti zahtjev</span> Query.ExecSQL; Query.Open; <span>// dobiti adresu korijenskog elementa</span> r: = Doc.Get_documentElement; Čvor2: = Doc.createElement ("Zahtjev"); <span>// stvori DOMElement (oznaku)</span>Čvor: = Doc.createElement ("Račun"); <span>// dodaj element u korijen</span> r.appendChild (čvor2); <span>// dodaj stavku u</span>Čvor2. appendChild (čvor); <span>// stvori DOMElement (oznaku)</span> Node3: = Doc.createElement ("Odlazak"); <span>// dodaj stavku u</span>Čvor. appendChild (čvor3); <span>// poziv u polje "Odlazak" zahtjeva</span> str: = Query.FieldByName ("Depurture"). AsString; <span>// kreiranje tekstualnog čvora = vrijednost polja</span><span>// dodijeliti vrijednost čvoru</span> <span>// tekstualni čvor, varijabla str</span> Node.appendChild (txt); <span>// slične operacije za oznaku <Destination>, <DataSend>, // <DataDepurture>, <Currency> // <DestinationCompany>(DB polje "Primatelj")</span>Čvor: = Doc.createElement ("Odredište"); <span>// naziv polja baze podataka ne mora biti isti kao naziv</span> str: = Query.FieldByName ("Primatelj") .AsString; <span>// oznaka, to je prednost korištenja</span> txt: = Doc.createTextNode (str); <span>// DOM sučelja ispred DBMS-a koji podržava XML sučelje, // poput ORACLE 8i ili Ms SQL 2000</span> Node.appendChild (txt); ... <span>// generiranje zahtjeva za specifikaciju za robu</span> <span>// zatvoriti zahtjev za pristup</span> Query.Close; <span>// vidi u tekstu "zahtjev B", info. O robi</span> Upit.Tekst: = upit; <span>// dodjela vrijednosti parametara</span> Query.Params.AsInteger: = Broj fakture; <span>// izvršiti zahtjev</span> Query2.ExecSQL; <span>// otvoreni pristup za traženje podataka</span> Query.Open; <span>// stvori DOMElement (oznaku)</span> Node3: = Doc.createElement ("Imems"); <span>// dodaj stavku u</span>Čvor. appendChild (čvor3); <span>// petlja kroz sve retke upita</span> <b>dok</b> <b>ne</b> Eof.Upit <b>čini</b> početi Node4: = Doc.createElement ("Imem"); <span>// dodaj stavku u</span> Node3.appendChild (Čvor4); <span>// formiranje podataka za oznaku</span> str: = Query.FieldByName ("Cijena"). AsString; txt: = Doc.createTextNode (str); Node.appendChild (txt); ... <span>// slične operacije za oznake <HZ_Cod>, <Quality>, <GoodName> </span> <b>kraj;</b> <b>kraj;</b> <p>Kao rezultat ovog postupka, generira se sljedeći tekst XML dokumenta:</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 formiranje zahtjeva koristi se Open metoda objekta <b>IXMLHttpRequest</b>:</p> <b>postupak</b> Otvori (const bstrMethod, - tip metode = "POST" bstrUrl, - url poslužitelja varAsync, - način komunikacije asinkroni / sinkroni = istinit bstrUser, - korisničko ime za autentifikaciju bstrPassword) - lozinka <h2>Izrada poslužiteljske strane obrade dokumenata</h2> <p>Kao što je ranije navedeno, obradom HTTP zahtjeva mogu upravljati ili CGI aplikacije ili Java servleti. Moguća je i varijanta pisanja ASP stranica. Ali u ovom slučaju prijenos podataka je moguć samo metodom "GET" kroz niz upita. Međutim, rukovanje HTTP zahtjevom za ASP stranice učinkovitije je od CGI aplikacije. No, po mom mišljenju, nije važno kako ga obraditi, već je važnije riješiti pitanje - kako izgraditi program obrade, a ne kojim sredstvima.</p> <p>Ako smo iz prethodnog poglavlja ispitivali opcije za formiranje XML dokumenta, onda je zadatak poslužiteljske aplikacije suprotan - raščlanjivanje XML dokumenata. Ispod je dio programa koji analizira xml dokument:</p> <b>postupak</b> Tthread1.Parser podataka (Pošiljatelj: Tobject); <b>var</b> <span>// deklarirati objekte DOMElement</span> r, FČvor: IXMLDOMElement; Str, Ime datoteke: String; parm: String; <span>// soclass deklaracija i</span> CoDocXML, CoDocXSL, CoDocResult: CoDomDocument; <span>// XMLDomDocument objekt</span> XMLDoc, XSLDoc, ResultDoc: DomDocument; <span>// HttpStr: String; - globalna varijabla koja sadrži niz HTTP zahtjeva</span> <b>Početi</b> XMLDoc: = coDocXML.Create; XMLDoc.LoadXML (HttpStr); <span>// dobiti adresu korijenskog elementa</span> r: = Doc.Get_documentElement; <span>// dobiti vrijednost elementa</span> FNode: = r.SelectSingleNode ("// TypeDocument"); <span>// dobiti vrijednost atributa id = "Narudžba"</span> Naziv datoteke: = FNode.GetAttibute ("id"); <span>// i formiranje naziva datoteke Order.xsl</span> Naziv datoteke: = Naziv datoteke + ". Xsl"; <span>// stvoriti XSLDoc dokument</span> XSLDoc: = coDocXSL.Kreiraj; XSLDoc.LoadXML (Naziv datoteke); <span>// stvoriti XMLDoc dokument</span> ResultDoc: = coDocResult.Create; <span>// postavlja sinkroni način obrade</span> ResultDoc.Set_async (false); <span>// postavlja provjeru analize</span> ResultDoc.validateOnParse: = istina; <span>// raščlanjivanje XMLDoc-a pomoću XSL predloška</span> XMLDoc.transformNodeToObject (XSLDoc, ResultDoc); <span>// varijabli Str dodjeljuje se tekstualna vrijednost</span> <span>// rezultirajućeg dokumenta.</span> Str: = ResultDoc.text; <span>// pronaći element</span> FNode: = r.SelectSingleNode ("// Broj fakture"); <span>// i dobijemo vrijednost elementa</span> parm: = FNode.text; <span>// zatvoriti zahtjev za pristup</span> Query.Close; Upit.Tekst: = Str; <span>// dodjela vrijednosti parametra</span> Query.Params.AsString: = parm; <span>// izvršiti zahtjev</span> Query.ExecSQL; <b>kraj;</b> <p>Cijeli vrhunac raščlanjivanja leži u korištenju XSL predloška, ​​koji se pojedinačno generira za svaku vrstu dokumenta. Rezultat raščlanjivanja je niz SQL upita. Nakon toga, izvršenje generiranog SQL niza upita izvršit će potrebne promjene u podacima u DBMS-u.</p> <p>Prednost korištenja raščlanjivanja kroz predložak je također u tome što se postiže određena fleksibilnost podataka, te se postiže potpuna neovisnost algoritma od programskog koda. Ispod je tekst XSL predloška koji se koristi za obradu 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">UMETNI u TABREG (OD, DO, TYPEDOC, tijelo) VRIJEDNOSTI (" <xsl:value-of select="from" />", "<xsl:value-of select="to" />", "<xsl:value-of select="TypeDocument/@id" />") </xsl:for-each> <xsl:for-each select="//item">UMETNI u ROBU (broj fakture, naziv, cijena, kvaliteta) VRIJEDNOSTI (": broj", " <xsl:value-of select="name" />", "<xsl:value-of select="price" />", "<xsl:value-of select="quality" /> ") </xsl:for-each> </xsl:template> </xsl:stylesheet> </p><p>Objašnjavajući gornji primjer, treba napomenuti da je upotreba para oznaka formalne prirode, budući da nakon raščlanjivanja, rezultirajući XML dokument mora formalno sadržavati barem jedan čvor. Metoda ResultDoc.text dodjeljuje tekstualnu vrijednost ResultDoc dobivenu tijekom raščlanjivanja XML dokumenta. U ovom slučaju vrijednost je sve što je uokvireno parom oznaka i, t.j. SQL upit koji smo generirali.</p> <p>Još jednu značajku pisanja programa treba napomenuti mogućnost korištenja SQL parametra <b>: br.</b> Korištenje parametra pojednostavljuje tekst xsl predloška. Definicija vrijednosti odgovarajućih elemenata čvorova XML dokumenta početno je određena odabirom po imenu odgovarajućeg čvora, na primjer:</p><h2>XSL na prvi pogled</h2> <p>XSL je akronim izveden od eXtensible Stylesheet Language, jezika za oblikovanje stilskih tablica (XML podaci). Kao što možete vidjeti iz zaglavlja, za formatiranje XML podataka koristi se eXtensible Stylesheet Language (XSL). Po definiciji, W3C XSL se sastoji od dva dijela:</p> <ul><li>XSLT - XSL transformacija. Jezik koji se koristi za transformaciju ili formatiranje (transformaciju) XML dokumenata. Dakle, uz pomoć XSLT-a možemo dobiti različite rezove skupa podataka i oblike prezentacije podataka.</li><li>Elementi oblikovanja. Ovi elementi uključuju sve tipografske elemente podataka nakon što su obrađeni s XSL-om. Koristi se samo za generiranje HTML stranica.</li> </ul><p>Uz pomoć XSLT-a možemo odabrati podatke koji su nam potrebni iz XML datoteke i urediti ih u obliku za prezentaciju korisniku. Na primjer, u našem slučaju transformirali smo XML podatke u obliku SQL upita. Klasična upotreba XSL-a obično je formatiranje podataka u obliku HTML stranica ili, rjeđe, u obliku RTF datoteka.</p> <p>XSL datoteka opisuje predložak prema kojem će se izvršiti transformacija XML podataka. Vraćajući se na xsl predloške, u XSLT-u se mogu razlikovati sljedeći elementi (smjernice):</p> <table cellspacing="0" cellpadding="4" width="500" border="1"><tbody><tr><td valign="top" width="31%"> <b>XSL direktive</b> </td><th align="middle" width="69%"> <b>opis</b> </th> </tr><tr><td>xsl: predlošci primjene</td> <td>Direktiva koja označava upotrebu odgovarajućih predložaka za atribut select = "ime predloška"</td> </tr><tr><td>xsl: atribut</td> <td>stvara stablo atributa i dodaje ga izlaznom elementu, naziv parametra = "ime atributa", imenski prostor je URI prostora imena (prefiks prostora imena)</td> </tr><tr><td>xsl: predložak poziva</td> <td>poziva predložak, naziv atributa = "URI za predložak"</td> </tr><tr><td>xsl: odaberite <br>xsl: kada <br>xsl: inače</td> <td>odabir prema uvjetu xsl: kada je expr = "procjena izraza na skripti", <br>jezik = "naziv-jezika" <br>test = "evaluirani izraz"</td> </tr><tr><td>xsl: komentar</td> <td>generira komentar u izlaznom dokumentu</td> </tr><tr><td>xsl: kopija <br>xsl: kopija</td> <td>kopira trenutni čvor u izlazni izvor ili umeće fragment dokumenta u čvor gdje je atribut select = "ime izvornog čvora"</td> </tr><tr><td>xsl: element</td> <td>stvara izlazni element po imenu, naziv atributa = "ime elementa", imenski prostor = "referenca uri imenskog prostora"</td> </tr><tr><td>xsl: za-svakog</td> <td>ponovno primjenjuje predložak na sve čvorove popisa čvorova, atribut select specificira popis čvorova</td> </tr><tr><td>xsl: ako</td> <td>provjera uvjeta, postavljena atributom testa kao izraz</td> </tr><tr><td>xsl: uključiti</td> <td>uključuje vanjski predložak, atribut href = "URI reference"</td> </tr><tr><td>xsl: izlaz</td> <td>specificira izlaz, atribut metode može biti "xml", "html" ili "text"</td> </tr><tr><td>xsl: param</td> <td>specificira vrijednost parametara, naziv atributa = "naziv parametra", odabir = "vrijednost"</td> </tr><tr><td>xsl: obrada-instrukcija</td> <td>stvara instrukciju za obradu, naziv atributa = "naziv procesa instrukcije"</td> </tr><tr><td>xsl: sortiraj</td> <td>sortira skup čvorova, atributi odabir = "naziv čvora", tip podataka = vrsta podataka ("tekst" | "broj" | Qname), red = smjer sortiranja ("uzlazno" | "silazno")</td> </tr><tr><td>xsl: tablica stilova</td> <td>definira xsl predložak dokumenta, korijenski je element za XSLT</td> </tr><tr><td>xsl: predložak</td> <td>definira xsl-template, naziv atributa = "URI prefiks za naziv predloška", match = "indikacija čvora na koji je predložak primijenjen"</td> </tr><tr><td>xsl: tekst</td> <td>generira tekst u izlazni tok, atribut disable-output-escaping = "da" ili "ne", ukazuje na mogućnost generiranja ESC znakova</td> </tr><tr><td>xsl: vrijednost-od</td> <td>umeće vrijednost odabranog čvora kao tekst, atribut select = "pokazivač na čvor" iz kojeg se preuzima vrijednost</td> </tr><tr><td>xsl: varijabla</td> <td>specificira vrijednost granica varijable, naziv atributa = "ime varijable", select = "izračunavanje vrijednosti varijable"</td> </tr><tr><td>xsl: sa-param</td> <td>primjenjuje parametar na predložak, naziv atributa = "ime parametra", odabir = izraz za procjenu trenutnog konteksta, zadana vrijednost "."</td> </tr></tbody></table><h2>Zaključak</h2> <p>Na kraju, treba napomenuti da korištenje standardnog XML parsera <i>msxml.dll</i> nije jedini alat za raščlanjivanje i stvaranje XML dokumenata. Na primjer, za učinkovito stvaranje XML dokumenata koristite komponente <b>TPageProduser</b> i <b>TableProduser</b>... No, ovaj članak samo naglašava širinu i primjenjivost DOM modela u praksi.</p> <p>Autor će vam biti vrlo zahvalan na povratnim informacijama o relevantnosti teme, općenitom sadržaju, stilu prezentacije, kao i svim ostalim komentarima koji će pomoći u daljnjem poboljšanju kvalitete pisanja zbirke članaka i izdavanja knjige koja obrađuje tema praktične strane korištenja XML dokumenata u e-trgovini. Detaljnije informacije o praktičnoj strani korištenja elektroničkih dokumenata mogu se pronaći na web stranici autora www.eDocs.al.ru Također je planirano postavljanje izvornih tekstova i primjera na stranicama autora.</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 pronašli odgovor na svoje pitanje? Pogledaj ovdje</div> <div class="items"> <div class="related-item"> <a class="related-item__title" href="https://appcube.ru/hr/chto-delat-s-sinim-ekranom-smerti-na-iphone-pochemu-vklyuchaetsya.html"><img src="/uploads/2be10369c5116c83911638f26be6c6d6.jpg" width="120" height="120" alt="Zašto se plavi ekran uključuje na iPhoneu Plavi ekran na iPhoneu 5s što učiniti" class="related-item__image" / loading=lazy loading=lazy>Zašto se plavi ekran uključuje na iPhoneu Plavi ekran na iPhoneu 5s što učiniti</a> <div class="related-item__comments"><span></span></div> </div> <div class="related-item"> <a class="related-item__title" href="https://appcube.ru/hr/apple-music-ne-rabotaet-bez-wifi-vs-chto-nuzhno-znat-ob-apple-music-polnyi-obzor.html"><img src="/uploads/801049885421deae4f0e46963361aede.jpg" width="120" height="120" alt="Sve što trebate znati o Apple Music" class="related-item__image" / loading=lazy loading=lazy>Sve što trebate znati o Apple Music</a> <div class="related-item__comments"><span></span></div> </div> <div class="related-item"> <a class="related-item__title" href="https://appcube.ru/hr/aifon-7-pervoe-vklyuchenie-nastroiki-kak-nastroit-aifon-kak-novyi-s-nulya.html"><img src="/uploads/d36ce1bea95132f80b137b4a1bb65c82.jpg" width="120" height="120" alt="Kako postaviti iPhone kao nov od nule - detaljne upute" class="related-item__image" / loading=lazy loading=lazy>Kako postaviti iPhone kao nov od nule - detaljne upute</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/e429be4b69e01fb94ae814076bc0b0d2.jpg" width="120" height="120" alt="On puni. Budi oprezan! Zbog toga ne možete razgovarati na svom mobitelu dok se puni. Koristite kvalitetnu memoriju" class="advices__image" / loading=lazy loading=lazy> <div class="advices__title" data-id="3334"><a href="https://appcube.ru/hr/on-na-zaryadke-bud-ostorozhen-vot-pochemu-nelzya-razgovarivat-po-mobilnomu.html">On puni. Budi oprezan! Zbog toga ne možete razgovarati na svom mobitelu dok se puni. Koristite kvalitetnu memoriju</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">Novi</div> <ul> <li><a href="https://appcube.ru/hr/est-li-v-aifone-gps-navigator-otklyuchit-gps-na-iphone-polnostyu-kak-eto.html" >Potpuno onemogućite GPS na iPhoneu: kako to učiniti?</a></li> <li><a href="https://appcube.ru/hr/rasshireniya-dlya-safari-kak-stavit-rasshireniya-dlya-safari-luchshie-vpn.html" >Kako instalirati Safari proširenja</a></li> <li><a href="https://appcube.ru/hr/kak-rabotaet-android-pay-v-rossii-my-protestirovali-kak-rabotaet-android-pay.html" >Kako Android Pay funkcionira u Rusiji</a></li> <li><a href="https://appcube.ru/hr/samsung-gelaksi-a-5-otzyvy-smartfon-samsung-a5-otzyvy-i-harakteristiki-samsung.html" >Smartphone "Samsung A5": recenzije i specifikacije</a></li> <li><a href="https://appcube.ru/hr/vesy-mi-fit-sravnivaem-umnye-vesy-xiaomi-mi-smart-scale-i-koogeek-smart-health-scale.html" >Usporedite pametne vage Xiaomi Mi Smart Scale i Koogeek Smart Health Scale</a></li> <li><a href="https://appcube.ru/hr/gde-naiti-pleilist-m3u-dlya-iptv-chto-takoe-pleilist-v-yutube-i-kak-ego.html" >Što je YouTube popis za reprodukciju i kako ga napraviti?</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">Popularni članci</div> <ul class="sidebar-posts"> <li><a href="https://appcube.ru/hr/kompaniya-t-mobile-pioner-mobilnoi-svyazi-iz-germanii-mobilnyi.html"><img src="/uploads/bd190345de24efa8d76aa98966101cc1.jpg" width="80" height="80" alt="Mobilni internet u Poljskoj, mobilni operateri, što odabrati T mobilni operater" / loading=lazy loading=lazy>Mobilni internet u Poljskoj, mobilni operateri, što odabrati T mobilni operater</a></li> <li><a href="https://appcube.ru/hr/pochemu-ne-mogut-dozvonitsya-na-vash-telefon-vse-prichiny-i-sposoby.html"><img src="/uploads/12dc1b0e13330d0de41cbdf97fdc158a.jpg" width="80" height="80" alt="Ne možete proći ili ne možete proći na svom iPhoneu, što da radim?" / loading=lazy loading=lazy>Ne možete proći ili ne možete proći na svom iPhoneu, što da radim?</a></li> <li><a href="https://appcube.ru/hr/spark-luchshii-pochtovyi-klient-dlya-macos-high-sierra-idealnyi-pochtovyi-klient.html"><img src="/uploads/e8db7c5e628f15fe51cb31864d57f983.jpg" width="80" height="80" alt="Idealan e-mail klijent za desktop - postoji li takvo što uopće?" / loading=lazy loading=lazy>Idealan e-mail klijent za desktop - postoji li takvo što uopće?</a></li> </ul> </div> <div class="section"> <div class="headline">Novo na stranici</div> <ul class="sidebar-posts sidebar-photo"> <li><a href="https://appcube.ru/hr/bolshoi-obzor-alternativnye-zvonilki-luchshaya-zvonilka-dlya.html">Najbolji dialer za Android</a></li> <li><a href="https://appcube.ru/hr/luchshaya-napolnaya-akustika-hi-fi-byudzhetnogo-urovnya-kak-vybrat.html">Kako odabrati Hi-Fi sustav zvučnika?</a></li> <li><a href="https://appcube.ru/hr/kakaya-skorost-domashnego-interneta-nuzhna-vam-na-samom-dele-kakoi.html">Koja je brzina interneta dovoljna?</a></li> <li><a href="https://appcube.ru/hr/izuchenie-elektromagnitnogo-dvigatelya-postoyannogo-toka-laboratornaya.html">Razumijemo principe rada elektromotora: prednosti i nedostatke različitih vrsta</a></li> <li><a href="https://appcube.ru/hr/ne-chitaetsya-mms-na-androide-kak-na-androide-nastroit-mms-zakaz.html">Kako postaviti mms na androidu</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/hr/">Novi</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8091"><a href="https://appcube.ru/hr/chto-tebe-nado-okei-google-golosovoi-poisk-okei-gugl-na-kompyuter-sposob.html">U redu, google glasovno pretraživanje na vašem računalu</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8090"><a href="https://appcube.ru/hr/chto-takoe-linkedin-linkedin-chto-eto-takoe-i-kak-linkedin-mozhet-pomoch-v-poiske-raboty.html">Linkedin – što je to i kako vam LinkedIn može pomoći da pronađete posao iz snova Linkedin profesionalna mreža</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8089"><a href="https://appcube.ru/hr/zakazat-hosting-vds-s-zashchitoi-ot-ddos-zashchita-ot-ddos-atak-ddos-guard-vash-zashchishchennyi.html">DDoS zaštita: DDoS GUARD - vaš siguran hosting</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8087"><a href="https://appcube.ru/hr/kak-poluchit-obnovlenie-windows-phone-windows-smartfony-teper-mozhno-obnovit-s.html">Windows pametni telefoni sada se mogu ažurirati pomoću računala</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/hr/">Popularan</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8086"><a href="https://appcube.ru/hr/krutye-programmy-dlya-android-samye-nuzhnye-prilozheniya-dlya-android.html">Najpotrebnije aplikacije za Android</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8085"><a href="https://appcube.ru/hr/okei-google-gde-nahoditsya-kakoi-statya-chto-delat-esli-ne-rabotaet-golosovoi.html">Što učiniti ako glasovno pretraživanje ne radi, Ok Google na Androidu?</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8084"><a href="https://appcube.ru/hr/luchshie-puly-dlya-maininga-ethereum-i-osobennosti-nachisleniya-pribyli-puly.html">Rudarski bazeni - zašto rudarima treba bazen?</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8083"><a href="https://appcube.ru/hr/kakie-seichas-populyarnye-socialnye-seti-luchshie-socialnye-seti-tendencii-i.html">Koje su sada popularne društvene mreže</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8082"><a href="https://appcube.ru/hr/izvestnye-soc-seti-mira-luchshie-socialnye-seti-spisok-socialnyh.html">Poznate društvene mreže svijeta. Najbolje društvene mreže. Popis društvenih mreža</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8080"><a href="https://appcube.ru/hr/etapy-sozdaniya-mobilnogo-prilozheniya-biznes-plan-po-razrabotke-mobilnogo.html">Poslovni plan za razvoj mobilne aplikacije</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8079"><a href="https://appcube.ru/hr/obzor-funkcii-iphone-se-vs-chto-nuzhno-znat-ob-se-podrobnyi-obzor-i.html">Detaljan pregled i testiranje opisa Apple iPhone SE iPhone 5 se</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8078"><a href="https://appcube.ru/hr/podnyat-poseshchaemost-stranicy-kak-uvelichit-trafik-dobeites.html">Povećajte promet stranice</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/hr/">Preporučeno</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8077"><a href="https://appcube.ru/hr/bystraya-zaryadka-dlya-telefonov-honor-bystraya-zaryadka-dlya-telefonov.html">Brzo punjenje za Honor telefone Kako brže napuniti svoj telefon bez super punjenja</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8076"><a href="https://appcube.ru/hr/kak-zashchitit-informaciyu-ot-spama-zashchita-ot-spama-metody-zashchity-ot.html">Kako zaštititi informacije od neželjene pošte</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8075"><a href="https://appcube.ru/hr/sistema-zashchity-ot-spama-5-bukv-metody-borby-so-spamom-kakie.html">Anti-spam sustav 5 slova</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8074"><a href="https://appcube.ru/hr/kak-podrostku-zarabotat-deneg-esli-net-raboty-kak-zarabotat.html">Kako napraviti tinejdžera na internetu?</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8073"><a href="https://appcube.ru/hr/proshivka-smartfonov-htc-nestandartnaya-proshivka-htc-desire--.html">Nestandardni firmver HTC Desire - priručnik Kako firmware htc</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8072"><a href="https://appcube.ru/hr/easypay-ua-sistema-elektronnyh-platezhei-easypay---elektronnye-dengi-belarusi-chto.html">Easypay - elektronički novac Bjelorusije</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8071"><a href="https://appcube.ru/hr/sozdanie-gruppy-v-kontakte-kak-sozdat-gruppu-v-vk.html">Kako stvoriti grupu u VK - promocija grupe u kontaktu</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8062"><a href="https://appcube.ru/hr/vklyuchit-otobrazhenie-razmera-kisti-v-fotoshop-reshaem-problemu-s.html">Rješavanje problema s nedostajućim obrisom kista u Photoshopu</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/hr/">O stranici</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6900"><a href="">O stranici</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6901"><a href="">Oglašavanje na web stranici</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6902"><a href="">Kontakti</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 Sva prava pridržana</p> <p>Web stranica o računalima</p> <ul class="footer-bottom__nav"> <li><a href="" >Oglašavanje 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">U kontaktu s</a></li> <li>kolege</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">Cvrkut</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>