Kompjuterë dhe pajisje moderne

XML përdoret gjithnjë e më shumë për të ruajtur informacionin dhe për ta shkëmbyer atë midis aplikacioneve dhe faqeve të internetit. Shumë aplikacione e përdorin këtë gjuhë si gjuhë bazë për ruajtjen e të dhënave, ndërsa të tjerët e përdorin atë për eksportimin dhe importimin e të dhënave XML. Kjo do të thotë se është koha që zhvilluesit të mendojnë se si mund të përdorin të dhënat XML në aplikacionet e tyre.

Në këtë artikull do të shikojmë modelin e objektit të dokumentit XML (DOM) dhe zbatimin e tij nga Microsoft - Microsoft XML DOM.

XML DOM është një model objekti që i siguron zhvilluesit objekte për ngarkimin dhe përpunimin e skedarëve XML. Modeli i objektit përbëhet nga objektet kryesore të mëposhtme: XMLDOMdocument, XMLDOMNodeList, XMLDOMNode, XMLDOMNamedNodeMap dhe XMLDOMParseError. Secili prej këtyre objekteve (përveç XMLDOMParseError) përmban veti dhe metoda që ju lejojnë të merrni informacion rreth objektit, të manipuloni vlerat dhe strukturën e objektit dhe të lundroni nëpër strukturën e dokumentit XML.

Le të shohim objektet kryesore XML DOM dhe të japim disa shembuj të përdorimit të tyre në Borland Delphi.

Përdorimi i XML DOM në Borland Delphi

Për të përdorur Microsoft XML DOM në aplikacionet Delphi, duhet të lidhni bibliotekën e duhur të tipit me projektin. Për ta bërë këtë, ne ekzekutojmë komandën Project | Importoni Bibliotekën e Llojeve dhe në kutinë e dialogut Import Type Library, zgjidhni bibliotekën Microsoft XML version 2.0 (Version 2.0), e cila zakonisht ndodhet në skedarin Windows\System\MSXML.DLL

Pasi të klikojmë butonin Create Unit, do të krijohet moduli i ndërfaqes MSXML_TLB, i cili do të na lejojë të përdorim objektet XML DOM: DOMDocument, XMLDocument, XMLHTTPRequest dhe një sërë të tjerash të implementuara në bibliotekën MSXML.DLL. Një referencë për modulin MSXML_TLB duhet të renditet në listën e Përdorimeve.

Pajisja XML DOM

Modeli i objektit të dokumentit përfaqëson një dokument XML si një strukturë peme e përbërë nga degë. Ndërfaqet programuese XML DOM lejojnë aplikacionet të lundrojnë në pemën e dokumentit dhe të manipulojnë degët e tij. Çdo degë mund të ketë një lloj specifik (DOMNodeType), sipas të cilit përcaktohen degët prind dhe fëmijë. Në shumicën e dokumenteve XML do të gjeni degë si elementi, atributi dhe teksti. Atributet janë një lloj i veçantë i degës dhe nuk janë degë fëmijësh. Atributet manipulohen duke përdorur metoda speciale të ofruara nga objektet XML DOM.

Përveç zbatimit të ndërfaqeve të rekomanduara nga World Wide Web Consortium (W3C), Microsoft XML DOM përmban metoda që mbështesin XSL, modele XSL, hapësira emrash dhe lloje të të dhënave. Për shembull, metoda SelectNodes ju lejon të përdorni XSL Pattern Syntax për të gjetur degë brenda një konteksti specifik dhe metoda TransformNode mbështet përdorimin e XSL për të kryer transformime.

Testoni dokumentin XML

Si shembull i një dokumenti XML, le të marrim një direktori të CD-ROM-ve muzikorë, i cili ka strukturën e mëposhtme:

Perandoria Burleske Bob Dylan SHBA Kolumbia 10.90 1985 Fshihe zemrën Bonnie Tylor MB CBS Records 9.90 1988 ... Zgjidh zemrën time Joe Cocker SHBA IKE 8.20 1987

Tani jemi gati të fillojmë të shikojmë modelin e objektit XML DOM, të cilin do ta fillojmë me objektin XMLDOMDocument.

Dokumenti XML - Objekti i dokumentit XMLDOMD

Puna me një dokument XML fillon me ngarkimin e tij. Për ta bërë këtë, ne përdorim metodën Load, e cila ka vetëm një parametër që tregon URL-në e dokumentit që do të ngarkohet. Kur ngarkoni skedarë nga një disk lokal, specifikohet vetëm emri i plotë i skedarit (protokolli file:/// mund të hiqet në këtë rast). Nëse dokumenti XML ruhet si varg, duhet të përdorni metodën LoadXML për të ngarkuar dokumentin.

Për të kontrolluar se si ngarkohet dokumenti (sinkron ose asinkron), përdorni veçorinë Asinkron. Si parazgjedhje, kjo veti vendoset në True, duke treguar që dokumenti është ngarkuar në mënyrë asinkrone dhe kontrolli i kthehet aplikacionit përpara se dokumenti të ngarkohet plotësisht. Përndryshe, dokumenti ngarkohet në mënyrë sinkrone dhe më pas duhet të kontrolloni vlerën e veçorisë ReadyState për të zbuluar nëse dokumenti është ngarkuar apo jo. Ju gjithashtu mund të krijoni një mbajtës të ngjarjeve OnReadyStateChange që do të marrë kontrollin kur vlera e vetive ReadyState ndryshon.

Më poshtë tregon se si të ngarkoni një dokument XML duke përdorur metodën Load:

Përdor ... MSXML_TLB ... procedurën TForm1.Button1Click(Dërguesi: TObject); var XMLDoc: IXMLDOMDdocument; filloni XMLDoc:= CoDOMDocument.Create; XMLDoc.Async:= False; XMLDoc.Load('C:\DATA\DATA.xml'); // // Këtu është kodi që manipulon // dokumentin XML dhe degët e tij // XMLDoc:= Nil; fundi;

Pasi të jetë ngarkuar dokumenti, ne mund të qasemi në vetitë e tij. Kështu, vetia NodeName do të përmbajë vlerën #document, vetia NodeTypeString do të përmbajë dokumentin e vlerës dhe veçoria URL do të përmbajë vlerën file:///C:/DATA/DATA.xml.

Trajtimi i gabimeve

Me interes të veçantë janë vetitë që lidhen me përpunimin e dokumentit kur ai ngarkohet. Kështu, vetia ParseError kthen një objekt XMLDOMParseError që përmban informacion në lidhje me një gabim që ka ndodhur gjatë përpunimit të dokumentit.

Për të shkruar një mbajtës gabimi, mund të shtoni kodin e mëposhtëm:

Var XMLError: IXMLDOMParseError; ... XMLDoc.Load('C:\DATA\DATA.xml'); XMLError:= XMLDoc.ParseError; Nëse XMLError.ErrorCode<>0 Pastaj // // Këtu trajtojmë gabimin // Else Memo1.Lines.Add(XMLDoc.XML); ... XMLDoc:= Nil;

Për të parë se çfarë informacioni kthehet në rast gabimi, le të ndryshojmë hyrjen e mëposhtme të drejtorisë:

Perandoria Burleske Bob Dylan SHBA Kolumbia 10.90 1985

heqja e elementit mbyllës në rreshtin e dytë:</p><p> <CD> <TITLE>Perandoria Burleske <ARTIST>Bob Dylan</ARTIST> <COUNTRY>SHBA</COUNTRY> <COMPANY>Kolumbia</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> </p><p>Tani le të shkruajmë kodin që kthen vlerat e vetive të objektit XMLDOMParseError:</p><p>XMLError:= XMLDoc.ParseError; Nëse XMLError.ErrorCode<>0 Pastaj me XMLError, Memo1.Lines do të fillojnë Add('File:' + URL); Add('Kodi: ' + IntToStr(ErrorCode)); Add('Gabim:' + Arsyeja); Add('Tekst: ' + SrcText); Add('Linja: ' + IntToStr(Linja)); Add('Pozicioni: ' + IntToStr(LinePos)); fund Else Memo1.Lines.Add(XMLDoc.XML); Fundi;</p><p>dhe le të ekzekutojmë aplikacionin tonë. Si rezultat, marrim informacionin e mëposhtëm të gabimit.</p> <p>Siç mund ta shihni nga shembulli i mësipërm, informacioni i kthyer nga objekti XMLDOMParseError është mjaft i mjaftueshëm për të lokalizuar gabimin dhe për të kuptuar arsyen e shfaqjes së tij.</p> <p>Tani le të rivendosim elementin mbyllës <TITLE>në dokumentin tonë dhe vazhdojmë diskutimin tonë për XML DOM.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Hyrja në Pemën e Dokumentit</h2> <p>Për të hyrë në një pemë dokumenti, ose mund të merrni elementin rrënjë dhe më pas të përsërisni nëpër degët e tij fëmijë, ose të gjeni një degë specifike. Në rastin e parë, ne marrim elementin rrënjë përmes vetive DocumentElement, i cili kthen një objekt të tipit XMLDOMNode. Më poshtë tregon se si të përdoret vetia DocumentElement për të marrë përmbajtjen e secilit element fëmijë:</p><p>Var nyja: IXMLDOMNode; Rrënja: IXMLDOMElement; I: Numri i plotë; ... Rrënja:= XMLDoc.DocumentElement; Për I:= 0 në Root.ChildNodes.Length-1 do Filloni Node:= Root.ChildNodes.Item[I]; Memo1.Linjat.Add(Nyja.Text); Fundi;</p><p>Për dokumentin tonë XML do të marrim tekstin e mëposhtëm.</p> <p>Nëse jemi të interesuar për një degë specifike ose një degë poshtë degës së parë të fëmijës, mund të përdorim ose metodën NodeFromID ose metodën GetElementByTagName të objektit XMLDOMDocument.</p> <p>Metoda NodeFromID kërkon një identifikues unik të përcaktuar në skemën XML ose përkufizimin e llojit të dokumentit (DTD) dhe kthen një degë me atë identifikues.</p> <p>Metoda GetElementByTagName kërkon specifikimin e një vargu me një element specifik (etiketë) dhe kthen të gjitha degët me këtë element. Më poshtë është se si të përdorni këtë metodë për të gjetur të gjithë artistët në drejtorinë tonë CD-ROM:</p><p>Nyjet: IXMLDOMNodeList; Nyja: IXMLDOMNode; ... Nyjet:= XMLDoc.GetElementsByTagName('ARTIST'); Për I:= 0 në Nyjet. Gjatësia-1 do Filloni Nyja:= Nyjet.Artikulli[I]; Memo1.Linjat.Add(Nyja.Text); Fundi;</p><p>Për dokumentin tonë XML do të marrim tekstin e mëposhtëm</p> <p>Vini re se metoda SelectNodes e objektit XMLDOMNode ofron një mënyrë më fleksibël për të hyrë në degët e dokumenteve. Por më shumë për këtë më poshtë.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Dega e dokumentit - Objekti XMLDOMNode</h2> <p>Një objekt XMLDOMNode përfaqëson një degë dokumenti. Tashmë e kemi hasur këtë objekt kur kemi marrë elementin rrënjë të dokumentit:</p><p>Root:= XMLDoc.DocumentElement;</p><p>Për të marrë informacion rreth degës së një dokumenti XML, mund të përdorni vetitë e objektit XMLDOMNode (Tabela 1).</p> <p>Për të hyrë në të dhënat e ruajtura në një degë, zakonisht përdorni ose veçorinë NodeValue (e disponueshme për atributet, degët e tekstit, komentet, udhëzimet e përpunimit dhe seksionet CDATA), veçorinë Text, e cila kthen përmbajtjen e tekstit të degës, ose veçorinë NodeTypedValue . Kjo e fundit, megjithatë, mund të përdoret vetëm për degët me elementë të shtypur.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>Lundrimi në pemën e dokumentit</h3> <p>Objekti XMLDOMNode ofron shumë mënyra për të lundruar në pemën e dokumentit. Për shembull, për të hyrë në degën prind përdoret vetia ParentNode (lloji XMLDOMNode), degët e fëmijëve aksesohen përmes veçorive ChildNodes (lloji XMLDOMNodeList), FirstChild dhe LastChild (lloji XMLDOMNode), etj. Vetia OwnerDocument kthen një objekt të tipit XMLDOMDocument që identifikon vetë dokumentin XML. Karakteristikat e listuara më sipër ju lejojnë të lundroni lehtësisht në pemën e dokumentit.</p> <p>Tani le të kalojmë nëpër të gjitha degët e dokumentit XML:</p><p>Root:= XMLDoc.DocumentElement; Për I:= 0 në Root.ChildNodes.Length-1 do Filloni Node:= Root.ChildNodes.Item[I]; Nëse Node.HasChildNodes Pastaj GetChilds(Nyja,0); Fundi;</p><p>Siç u përmend më lart, SelectNodes i objektit XMLDOMNode ofron një mënyrë më fleksibël për të hyrë në degët e dokumenteve. Përveç kësaj, ekziston një metodë SelectSingleNode që kthen vetëm degën e parë të dokumentit. Të dyja këto metoda ju lejojnë të specifikoni shabllonet XSL për të kërkuar degë.</p> <p>Le të ecim përmes procesit të përdorimit të metodës SelectNodes për të tërhequr të gjitha degët që kanë një degë CD dhe një nëndegë PRICE:</p><p>Root:= XMLDoc.DocumentElement; Nyjet:= Root.SelectNodes('CD/PRICE');</p><p>Të gjitha nëndegët PRICE të degës CD do të vendosen në koleksionin Nodes. Ne do të kthehemi në diskutimin e shablloneve XSL pak më vonë.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>Manipulimi i degëve të fëmijëve</h3> <p>Për të manipuluar degët e fëmijëve, ne mund të përdorim metodat e objektit XMLDOMNode (Tabela 2).</p> <p>Për të fshirë plotësisht hyrjen për diskun e parë, duhet të ekzekutoni kodin e mëposhtëm:</p><p>Var XMLDoc: IXMLDOMDdocument; Rrënja: IXMLDOMNode; Nyja: IXMLDOMNode; XMLDoc:= CoDOMDocument.Create; XMLDoc.Async:= False; XMLDoc.Load('C:\DATA\DATA.xml'); // Merrni elementin rrënjë Root:= XMLDoc.DocumentElement; Nyja:= Rrënja; // Hiq degën e parë të fëmijës Node.RemoveChild(Node.FirstChild);</p><p>Vini re se në këtë shembull ne po fshijmë degën e parë të fëmijës. Si të hiqni elementin e parë të degës së parë të fëmijës është treguar më poshtë:</p><p>Var XMLDoc: IXMLDOMDdocument; Rrënja: IXMLDOMNode; Nyja: IXMLDOMNode; XMLDoc:= CoDOMDocument.Create; XMLDoc.Async:= False; XMLDoc.Load('C:\DATA\DATA.xml'); // Merrni elementin rrënjë Root:= XMLDoc.DocumentElement; // dhe dega e parë e fëmijës Nyja:= Root.FirstChild; // Hiq degën e parë të fëmijës Node.RemoveChild(Node.FirstChild);</p><p>Në shembullin e mësipërm, ne fshimë jo degën e parë <CD>…</CD>, dhe elementi i parë i degës është <TITLE>….

Tani le të shtojmë një degë të re. Më poshtë është kodi që tregon se si të shtoni një hyrje të re në CD-ROM muzikore:

Var NewNode: IXMLDOMNode; Fëmija: IXMLDOMNode; ... // Krijo një degë të re - NewNode:= XMLDoc.CreateNode(1, 'CD', ''); // Shtoni një element Fëmijë:= XMLDoc.CreateNode(1,'TITLE',''); // Shto një element NewNode.AppendChild(Child); // Dhe vendosni vlerën e tij Child.Text:= 'Pink Floyd'; // Shtoni një element <ARTIST>Fëmijë:= XMLDoc.CreateNode(1, 'ARTIST', ''); // Shto një element NewNode.AppendChild(Child); // Dhe vendosni vlerën e saj Child.Text:= 'Këmbana e ndarjes'; // Shtoni një element <COUNTRY>Fëmijë:= XMLDoc.CreateNode(1, 'COUNTRY', ''); // Shto një element NewNode.AppendChild(Child); // Dhe vendosni vlerën e tij Child.Text:= 'UK'; // Shtoni një element <COMPANY>Fëmijë:= XMLDoc.CreateNode(1, 'COMPANY', ''); // Shto një element NewNode.AppendChild(Child); // Dhe vendos vlerën e tij Child.Text:= ‘EMI Records Ltd.’; // Shtoni një element <PRICE>Fëmijë:= XMLDoc.CreateNode(1, 'PRICE', ''); // Shto një element NewNode.AppendChild(Child); // Dhe vendosni vlerën e tij Child.Text:= '11.99"; // Shto një element <YEAR>Fëmijë:= XMLDoc.CreateNode(1, 'YEAR', ''); // Shto një element NewNode.AppendChild(Child); // Dhe vendosni vlerën e tij Fëmijë.Teksti:= '1994'; // Dhe shtoni një degë Root.AppendChild(NewNode); ...</p><p>Kodi i mësipërm tregon sekuencën e mëposhtme të hapave për të shtuar një degë të re:</p> <ul><li>Krijimi i një dege të re duke përdorur metodën CreateNode: <ul><li>krijimi i një elementi duke përdorur metodën CreateNode;</li> <li>shtimi i një elementi në një degë duke përdorur metodën AppendChild;</li> <li>vendosja e vlerës së elementit nëpërmjet vetisë Text;</li> <li>...përsëriteni për të gjithë elementët.</li> </ul></li> <li>Shtimi i një dege të re në një dokument duke përdorur metodën AppendChild.</li> </ul><p>Kujtoni që metoda AppendChild shton një degë në fund të pemës. Për të shtuar një degë në një vendndodhje specifike në pemë, duhet të përdorni metodën InsertBefore.</p> <h2>Kompleti i degëve - objekti XMLDOMNodeList</h2> <p>Objekti XMLNodeList përmban një listë të degëve që mund të ndërtohen duke përdorur metodat SelectNodes ose GetElementsByTagName, ose të merren nga vetia ChildNodes.</p> <p>Ne kemi parë tashmë përdorimin e këtij objekti në shembullin e dhënë në seksionin "Navigimi i pemës së dokumentit". Këtu paraqesim disa vërejtje teorike.</p> <p>Numri i degëve në listë mund të merret si vlerë e pronës Length. Degët kanë indekse nga 0 në Length-1, dhe çdo degë individuale është e aksesueshme përmes elementit të grupit Item me indeksin përkatës.</p> <p>Lundrimi nëpër një listë të degëve mund të bëhet gjithashtu duke përdorur metodën NextNode, e cila kthen degën tjetër në listë, ose Nil nëse dega aktuale është e fundit. Për t'u kthyer në fillim të listës, telefononi metodën Reset.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Krijimi dhe ruajtja e dokumenteve</h2> <p>Deri më tani ne kemi parë se si mund të shtoni degë dhe elementë në dokumentet ekzistuese XML. Tani le të krijojmë një dokument XML në fluturim. Para së gjithash, le t'ju kujtojmë se një dokument mund të ngarkohet jo vetëm nga një URL, por edhe nga një varg i rregullt. Më poshtë tregon se si të krijoni një element rrënjë, i cili më pas mund të përdoret për të ndërtuar në mënyrë dinamike elemente të tjera (të cilat i kemi trajtuar tashmë në seksionin Manipulimi i degëve të fëmijëve):</p><p>Var XMLDoc: IXMLDOMDdocument; Rrënja: IXMLDOMNode; Nyja: IXMLDOMNode; S: WideString; ... S:= ' <CATALOG></CATALOG>'; XMLDoc:= CoDOMDocument.Create; XMLDoc.Async:= False; XMLDoc.LoadXML(S); Root:= XMLDoc.DocumentElement; Nyja:= XMLDoc.CreateNode(1, 'CD', ''); Root.AppendChild(Nyja); Memo1.Lines.Add(XMLDoc.XML); ... XMLDoc:= Nil;</p><p>Pas ndërtimit të dokumentit XML, ne do ta ruajmë atë në një skedar duke përdorur metodën Save. Për shembull:</p> <p>XMLDoc.Save('C:\DATA\NEWCD.XML');</p> <p>Përveç ruajtjes në një skedar, metoda Save ju lejon të ruani dokumentin XML në një objekt të ri XMLDOMDocument. Në këtë rast, dokumenti përpunohet plotësisht dhe, si rezultat, kontrollohet struktura dhe sintaksa e tij. Më poshtë tregon se si të ruani një dokument në një objekt tjetër:</p><p>Procedura TForm1.Button2Click(Dërguesi: TObject); var XMLDoc2: IXMLDOMDdocument; fillo XMLDoc2:= CoDOMDocument.Create; XMLDoc.Save(XMLDoc2); Memo2.Lines.Add(XMLDoc2.XML); ... XMLDoc2:= Zero; fundi;</p><p>Së fundi, vini re se metoda Save ju lejon gjithashtu të ruani një dokument XML në objekte të tjera COM që mbështesin ndërfaqet IStream, IPersistStream ose IPersistStreamInit.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Përdorimi i modeleve XSL</h2> <p>Kur diskutonim metodën SelectNodes të objektit XMLDOMNode, përmendëm se ofron një mënyrë më fleksibël për të hyrë në degët e dokumenteve. Fleksibiliteti qëndron në faktin se ju mund të specifikoni një shabllon XSL si një kriter për zgjedhjen e degëve. Modele të tilla ofrojnë një mekanizëm të fuqishëm për kërkimin e informacionit në dokumentet XML. Për shembull, për të marrë një listë të të gjithë titujve të CD-ROM-it muzikor në katalogun tonë, mund të kryeni pyetjen e mëposhtme:</p><p>Për të zbuluar se cilët disqe artistësh janë lëshuar në SHBA, kërkesa është formuar si më poshtë:</p><p>Nyjet:= Root.SelectNodes('CD/ARTIST');</p><p>Më poshtë tregon se si të gjeni diskun e parë në drejtori:</p><p>Nyjet:= Root.SelectNodes('CD/TITLE');</p><p>Dhe e fundit:</p><p>Nyjet:= Root.SelectNodes('CD/TITLE');</p><p>Për të gjetur CD-të e Bob Dylan, mund të kryeni pyetjen e mëposhtme:</p><p>Nyjet:= Root.SelectNodes('CD[$ndonjë$ ARTIST= "Bob Dylan"]/TITLE');</p><p>dhe për të marrë një listë të disqeve të lëshuara pas vitit 1985, ne kryejmë pyetjen e mëposhtme:</p><p>Nyjet:= Root.SelectNodes('CD/TITLE');</p><p>Një diskutim më i detajuar i sintaksës XSL kërkon një postim të veçantë. Për të intriguar lexuesit dhe për të inkurajuar kërkime të mëtejshme, unë do të jap vetëm një shembull të vogël të përdorimeve të mundshme të XSL. Le të themi se duhet ta konvertojmë katalogun tonë në një tabelë të rregullt HTML. Duke përdorur metoda tradicionale, ne duhet të kalojmë nëpër të gjitha degët e pemës dhe të formojmë etiketat e duhura për çdo element të marrë <TD>…</TD>.</p> <p>Duke përdorur XSL, ne thjesht krijojmë një shabllon (ose fletë stili) në të cilin tregojmë se çfarë duhet të konvertohet dhe si. Më pas e mbulojmë këtë shabllon në drejtorinë tonë - dhe kemi mbaruar: kemi tekstin e një shablloni XSL që e konverton direktoriumin në një tabelë (Lista 2).</p> <p>Kodi për mbivendosjen e shabllonit XSL në drejtorinë tonë duket si ky:</p><p>Procedura TForm1.Button2Click(Dërguesi: TObject); var XSLDoc: IXMLDOMDdocument; filloni XSLDoc:= CoDOMDocument.Create; XSLDoc.Load('C:\DATA\DATA.xsl'); Memo2.Text:= XMLDoc.TransformNode(XSLDoc); XSLDoc:= Zero; fundi;</p><p>Duke përfunduar diskutimin tonë për XSL, duhet thënë se aktualisht kjo gjuhë përdoret në mënyrë aktive për transformimin midis dokumenteve të ndryshme XML, si dhe për formatimin e dokumenteve.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>konkluzioni</h2> <p>Për arsye të dukshme, është e pamundur të rishikohen të gjitha objektet Microsoft XML DOM dhe të jepen shembuj të përdorimit të tyre në një artikull. Këtu kemi prekur vetëm çështjet themelore të përdorimit të XML DOM në aplikacione. Në tabelë Figura 3 tregon të gjitha objektet e implementuara në Microsoft XML DOM.</p> <p>ComputerPress 12"2000</p> <p>Shumë programues të Delphi e lidhin ruajtjen e cilësimeve me përdorimin <i>INI</i> skedarët në programet tuaja. Përdorimi i kësaj metode në projekte më pak serioze duhet të shmanget, pasi kufizon fleksibilitetin, gjë që pengon zgjerimin e mëtejshëm të programit. Vlen të thuhet se kjo qasje është mjaft e popullarizuar për shkak të lehtësisë së përdorimit dhe disponueshmërisë së mjeteve të integruara në mjedisin e zhvillimit. <br><br>Sidoqoftë, opsioni ideal për ruajtjen e cilësimeve të programit është i strukturuar <i>XML</i> dosjet. Avantazhi i tyre është se numri i parametrave mund të mos jetë fiks. Për ta kuptuar më mirë këtë, le të shohim një shembull specifik.</p><p>Në programin USearch, kur klikoni mbi një hyrje, shfaqet një meny konteksti, e cila shfaq një listë artikujsh. Këta artikuj janë komanda, të cilat nga ana e tyre ngarkohen nga skedari i cilësimeve. Nëse cilësimet janë ruajtur në <i>INI</i> file, atëherë programi mund të ruajë dhe ngarkojë një numër të caktuar komandash, për shembull 10 ose 50. Sapo të nevojitet një vlerë më e madhe, kodi do të duhet të rishkruhet dhe të ripërpilohet në përputhje me rrethanat.</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>Duke përdorur qasjen duke përdorur <i>XML</i> skedarët, ne do të jemi në gjendje të ngarkojmë të gjithë parametrat e seksionit në mënyrë dinamike. Përveç gjithë kësaj, skedari i konfigurimit do të bëhet më elegant, pa numërim të tepërt të parametrave. Megjithatë, mjete standarde për të punuar me <i>XML</i> Delphi ka shumë disavantazhe, kështu që unë rekomandoj përdorimin e bibliotekës standarde <b>MSXML</b>. Zakonisht përfshihet si parazgjedhje në familjen e sistemeve operative 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>Te lidhesh <b>MSXML</b>, duhet të gjenerojmë një skedar ndërfaqeje me një listë të të gjitha funksioneve, duke e importuar atë nga serveri COM. Janë shkruar mjaft artikuj të detajuar se si të importoni një ndërfaqe, por ju sugjeroj të shkarkoni skedarin <b>MSXML2_TLB.PAS</b> tashmë gati për përdorim. Pasi të shkarkohet skedari, vendoseni pranë projektit tuaj ose hidheni në dosjen lib të mjedisit Delphi. Kështu, të gjitha programet e krijuara do të jenë në gjendje të përdorin modulin <b>MSXML</b>, thjesht duhet të shtoni linjën MSXML2_TLB tek përdorimet.</p><p>Për qartësi, merrni parasysh shembullin e mëposhtëm të përdorimit të kësaj biblioteke:</p><p>Të dhënat e ngarkimit të procedurës; var XMLDoc: DOMDocument; Rrënja: IXMLDOMElement; filloni XMLDoc:= CoDOMDocument.Create; XMLDoc.Load("settins.xml"); Root:= XMLDoc.DocumentElement; ShowMessage(Root.SelectSingleNode("madhësia/gjerësia").Tekst); Rrënja:= zero; XMLDoc:= zero; fundi;</p><p>Fillimisht, krijohet një shembull i klasës DOMDocument dhe më pas përmbajtja e skedarit settings.xml ngarkohet në memorie. Meqenëse sipas standardit çdo <i>XML</i> skedari duhet të përmbajë një etiketë rrënjësore (në këtë rast <i>konfigurim</i>), atëherë duhet ta marrim duke përdorur funksionin <i>Elementi i dokumentit</i>. Pastaj del përmbajtja midis etiketave <width></width>, të cilat nga ana tjetër janë të vendosura midis etiketave <size></size>. Kështu, nga skedari settings.xml, metoda jonë do të shfaqë tekstin në MessageBox <i>"100px"</i>.</p><p> <?xml version="1.0" encoding="utf-8"?> <config> <size> <height>500 px</height> <width>100 px</width> </size> </config> </p><p>Këtu përdoret metoda SelectSingleNode, e cila merr një varg si parametër</p> <p>Mirë se vini! Ky blog i dedikohet internetit dhe kompjuterëve, ose më mirë u kushtua atyre.</p> <p>Ndoshta është menjëherë e qartë se asnjë artikull i ri nuk është shfaqur në faqe për shumë vite. Po, ky është fati i shumicës së blogjeve. Ky projekt dikur ishte një ndërmarrje ambicioze dhe autori, si shumë të tjerë që shkruanin në atë kohë, kishte plane ambicioze për t'u bërë një nga blogerët më të mirë rusë. Epo, nëse shikoni tani, nga ato blogje që u krijuan njëkohësisht me timin, shumica tashmë janë zhdukur në përjetësi. Dhe thjesht nuk kisha kohë të mjaftueshme për të bërë blog. Pra, po, nuk përditësohet më. Edhe pse dikur fituam konkursin "Runet Blog 2011" me këtë faqe.</p> <p>Madje kisha idenë që të fshija të gjitha këto, por më pas rishikova materialet e vjetra dhe kuptova se ato mund të ishin ende të dobishme për lexuesit. Po, disa artikuj janë të vjetëruar (nëse kam forcë të mjaftueshme, ato do të shënohen në përputhje me rrethanat), por faqja, për shembull, mund të jetë e dobishme për fillestarët - këtu mund të lexoni për konceptet themelore të Internetit, të mësoni se si të konfiguroni interneti, Windows, apo edhe të vendosni të kaloni në Linux. Pra, hidhini një sy kategorive dhe zgjidhni atë që ju përshtatet.</p> <p>E megjithatë, shpresoj që ky të jetë më shumë se thjesht një blog, por një udhëzues i vërtetë për internetin. Faqja mund të shikohet në modalitetin e drejtorisë, ku të gjithë artikujt e disponueshëm janë të strukturuar sipas kategorive. Dhe, kush e di, ndoshta një ditë këtu do të fillojnë të shfaqen artikuj të rinj me cilësi të lartë.</p> <p><i>Sander</i></p> <p>Picodi.ru është një portal zbritje nga International Coupons, një ekspert polak në fushën e kursimeve dhe blerjeve të lira. Polakët konsiderohen si një nga kombet më të kursyer në botë, kështu që nuk është për t'u habitur që ky lloj projekti u rrit nga startup-i polak kodyrabatowe.pl. Si mund të jetë i dobishëm ky portal për përdoruesin mesatar të internetit në Rusi?</p> <p>Telefonat modernë Android janë më shumë se telefona. Ju mësoheni me grupin e programeve të instaluara, historinë e thirrjeve dhe mesazheve tuaja me tekst, koleksionin tuaj të fotografive dhe shumë më tepër. Por koha kalon dhe pajisja me të cilën keni qenë plotësisht të kënaqur fillon të ngadalësohet, defektet ose thjesht humbet pamjen e saj të dukshme për shkak të patate të skuqura në trup ose gërvishtjeve në ekran. Lind pyetja e zgjedhjes së një telefoni të ri dhe ndryshimit të telefonit Android. Dhe nëse ne e injorojmë çështjen e zgjedhjes për momentin, atëherë "lëvizja" në një telefon të ri mbetet një problem serioz - absolutisht nuk dëshironi të filloni të gjitha të dhënat nga e para. Kjo është ajo për të cilën do të flasim sot.</p> <p>Shumica e lexuesve të këtij blogu me shumë mundësi nuk kanë hasur kurrë në sisteme të kontrollit të versioneve dhe nuk do t'i takojnë ato në të ardhmen e afërt. është për të ardhur keq. Kjo shpikje jashtëzakonisht e përshtatshme përdoret mjaft gjerësisht nga programuesit, por, për mendimin tim, mund të jetë gjithashtu shumë i dobishëm për ata që punojnë në mënyrë aktive me tekste. Por, me siguri, tani nuk ka një sistem të vetëm të kontrollit të versionit që do të ishte i lehtë për t'u përdorur për punë "zyre" (Microsoft Office). Sidoqoftë, mendoj se materiali i paraqitur në artikull mund të jetë me interes për të gjithë lexuesit.</p> <p>Nëse keni pyetur veten se si të shikoni filma në internet dhe të përdorni internetin nga televizori juaj, ky artikull është për ju. Jo, e di që disa televizorë tashmë kanë funksionalitet Smart TV, por nuk e kam parë kurrë të funksionojë siç duhet. Me sa duket, kjo është arsyeja pse Google së fundmi demonstroi një pajisje absolutisht mahnitëse që u bë menjëherë një sensacion. Po flasim për transmetuesin e medias Chromecast, një version më i avancuar dhe më i përballueshëm i luajtësit katastrofik të Nexus Q të vitit të kaluar.</p> <p>Dongle Chromecast, dimensionet e të cilit nuk i kalojnë 2 inç, lidhet me portën HDMI të televizorit dhe ju lejon të shijoni shikimin e përmbajtjes së internetit me transmetim. Për të kontrolluar transmetuesin, mund të përdorni çdo pajisje (tabletë, PC, smartphone) bazuar në platformën operative iOS, Windows, Android ose Mac OS.</p> <p>Ky artikull i kushtohet dizajnimit të kujtesës së sistemit Android, problemeve që mund të lindin për shkak të mungesës së saj dhe mënyrave për t'i zgjidhur ato. Unë vetë kohët e fundit kam hasur në faktin se telefoni im Android filloi të shfaqë rregullisht mesazhe në lidhje me kujtesën e ulët kur u përpoqa të instaloja këtë ose atë aplikacion. E cila ishte shumë e çuditshme për mua, duke qenë se sipas përshkrimit në treg duhet të kishte rreth 16 GB, dhe gjithashtu e rrita këtë vëllim duke përdorur një kartë memorie shtesë. Megjithatë, pati një problem dhe u desh shumë përçarje përpara se të gjeja zgjidhjen e duhur që nuk kërkonte akses rrënjësor ose rikthimin e plotë të telefonit në gjendjen e tij të fabrikës.</p> <p>Kohët e fundit, një vëmendje e madhe i është kushtuar ndërtimit të sistemeve të e-biznesit, ose siç quhen edhe ato - B2B (business to business). Duke marrë parasysh rekomandimet për ndërtimin e sistemeve të transmetimit të shkëmbimit të organit koordinues të teknologjive të Internetit - Konsorciumi WWW: theksi vihet në teknologjitë XML dhe ndërtimin e sistemeve të shkëmbimit të dokumenteve XML.</p> <p>Avantazhi i përdorimit të XML në biznesin elektronik është efikasiteti i lartë i sistemeve B2B me kosto të ulëta të krijimit të tij për shkak të një prezantimi të qartë dhe vizual të informacionit të strukturuar, aftësisë për të përdorur protokollet moderne të rrjetit dhe krijimin e sistemeve të biznesit në kohë reale.</p> <p>Pavarësia e paraqitjes së informacionit në formën e dokumenteve XML lejon kompanitë e ndryshme që marrin pjesë në biznesin elektronik të prodhojnë softuer të pavarur nga njëra-tjetra.</p> <p>Në të gjitha sistemet, shkëmbimi zakonisht ndërtohet sipas të njëjtës skemë, duke përdorur kërkesat HTTP. Protokolli SSL përdoret si një protokoll i sigurisë së informacionit (por kjo është një temë më vete).</p> <p>Një nga opsionet e mundshme për përpunimin e mesazheve XML është ndërtimi i aplikacioneve BIN/CGI (ISAPI) ose komponentëve COM (server) që gjenerojnë ose përpunojnë dokumente XML.</p> <p>Nga njëra anë, aplikacioni vepron si një klient që lëshon një kërkesë HTTP në modalitetin POST, nga ana tjetër, ekziston një server WEB në anën e të cilit përpunohet kërkesa dhe jepet përgjigja. Dokumentet XML përdoren në shkëmbimin e informacionit.</p> <p>Një nga opsionet më efektive të zbatimit është përdorimi i një analizuesi ekzistues XML që mbështet modelin DOM. Ky analizues është një paketë shpërndarjeje e Win`98 ose një komponent i IE 4.7 e lart (për Win`95) dhe përfaqëson një server COM të vendosur në bibliotekën msxml.dll.</p> <p>Modeli i objektit të komponentit (COM) - përfaqëson të dhënat dhe metodat e kapsuluara në një entitet të vetëm dhe një mënyrë për t'i aksesuar ato përmes një sistemi ndërfaqesh. Duke përdorur Delphi, është mjaft e lehtë për të hyrë në klasat e një objekti COM (disa klasa mund të përfshihen në një server COM). Objektet arrihen duke inicializuar një shembull të klasës përmes një sistemi ndërfaqesh. Përshkrimi i ndërfaqeve kryhet nga Gjuha e Përkufizimit të Ndërfaqes (IDL), e cila mund të bëhet automatikisht duke përdorur mjedisin.</p> <p>Mjetet e Delphi importojnë nga një server COM <i>msxml.dll</i>, janë ndërtuar skedarët e përshkrimit të ndërfaqes IDL dhe një skedar binar përshkrimi i llojeve të bibliotekës - TLB. Ky operacion kryhet përmes menysë së sistemit: <b>Projekti | Lloji Importi i Bibliotekës:</b>(foto 1). Tjetra, shfaqet një kuti dialogu (Figura 2), në të cilën ju duhet të zgjidhni një objekt COM (në rastin tonë, objekti është i regjistruar nën emrin "Microsoft.XMLDom (Versioni 2.0)") dhe të krijoni një skedar TLB (buton <b>Krijo njësi</b>). Duke përdorur skedarin TLB, mjedisi gjeneron një skedar përshkrimi të serverit COM "Pascal" - MSXML_TLB.pas</p> <p>Skedari MSXML_TLB.pas përshkruan të gjitha ndërfaqet, konstantat dhe bashkë-klasat e serverit COM.</p> <p>Për të hyrë në objektet e elementit COM, është e nevojshme në direktivë <b>PËRDORIM</b> shtoni emrin e skedarit të përshkrimit të bibliotekës (MSXML_TLB.pas). Më poshtë është një program i thjeshtë që përdor analizuesin standard DOM msxml.dll, i cili ngarkon një dokument XML dhe e shfaq atë në elementin e fushës së tekstit Memo1.</p> <b>përdor</b> Windows, Mesazhet, SysUtils, Klasat, Grafika, Kontrollet, Format, Dialogët, OleServer, MSXML_TLB, StdCtrls; <b>lloji</b> TForm1 = <b>klasës</b>(TForm)Button1: TButton; Memo1: TMemo; <b>procedurë</b> Button1Click(Dërguesi: TObject); <b>fundi;</b> <b>var</b> Forma1: TForm1; <b>zbatimi</b>($R *.DFM) <b>Procedura</b> TForm1.Button1Click(Dërguesi: Tobject); <span>// deklarimi i një koklase të objektit DODocument;</span> <b>var</b> coDoc: CoDOMDdocument; <span>// klasë në përputhje me ndërfaqen IDOMDocument;</span> <b>var</b> Doc: IXMLDOMDdocument; <b>fillojnë</b> <span>// krijimi i një shembulli të një objekti DODocument;</span> Doc:= coDoc.Create; <span>// thirrja e metodës Load të një shembulli të objektit DODocument;</span> Doc.load ("data.xml"); <span>// akses në vetinë xml të shembullit të objektit DODocument;</span> Memo1.Text:=Doc.xml; <b>fundi;</b> <b>fund.</b> <h2>Koncepti i DOM - Modeli i objektit të dokumentit</h2> <p>Çdo dokument XML përfaqësohet si një grup i shumë objekteve (klasave), me ndihmën e të cilave është e mundur qasja në elemente individuale (fusha objektesh). DOM - ndërfaqja përshkruan qasjen në objekte të thjeshta të tipit DOMString ose CharacterData, dhe në pjesë ose elementë individualë të një dokumenti XML: DOMFragmentElement, DOMNode, DOMElement.</p> <p>Më poshtë janë veçoritë dhe metodat më të rëndësishme të objekteve XMLDOMNode, XMLDOMNode, XMLDOMNodeList. Duhet të theksohet se metodat dhe funksionet e objekteve DOM (Document Object Model) të paraqitura më poshtë përdoren nga analizuesi Microsoft XML msxml.dll dhe janë disi më të gjera se modeli DOM i miratuar nga Konsorciumi W3C.</p> <p>Një përshkrim më i plotë i ndërfaqes së objektit DOM mund të gjendet në</p> <table cellspacing="0" cellpadding="4" width="500" border="1"><tbody><tr><td valign="top" colspan="2">Objekti i dokumentit XMLDOMD</td> </tr><tr><td valign="top" colspan="2">Përfaqëson nivelin më të lartë të hierarkisë së objektit dhe përmban metoda për të punuar me një dokument: ngarkimin e tij, analizimin e tij, krijimin e elementeve, atributeve, komenteve në të, etj. .</td> </tr><tr><td valign="top" colspan="2"><b>Vetitë</b> </td> </tr><tr><td valign="top" width="39%"><b>Asinkron</b> </td> <td valign="top" width="61%">Vetia që identifikon mënyrën aktuale të përpunimit</td> </tr><tr><td valign="top" width="39%" height="19"><b>Gabim analize</b> </td> <td valign="top" width="61%" height="19">Kthen një referencë për objektin e trajtimit të gabimit XMLDOMParseError</td> </tr><tr><td valign="top" width="39%"><b>Aktivizo - çaktivizo verifikimin e dokumentit.</b> </td> <td> </td> </tr><tr><td valign="top" width="39%"><b>url</b> </td> <td valign="top" width="61%">Kthen URL-në e dokumentit</td> </tr><tr><td valign="top" width="39%"><b>Elementi i dokumentit</b> </td> <td valign="top" width="61%">Përmban një referencë për elementin rrënjë të dokumentit si një objekt XMLDOMElement.</td> </tr><tr><td valign="top" colspan="2"><b>Metodat</b> </td> </tr><tr><td valign="top" width="39%"><b>ngarkoni (url) <br>loadXML (xmlString)</b> </td> <td valign="top" width="61%">Ngarkon një dokument XML,</td> </tr><tr><td valign="top" width="39%"><b>ruaj (objTarget)</b> </td> <td valign="top" width="61%">Ruan një dokument XML në një skedar</td> </tr><tr><td valign="top" width="39%"><b>aborti</b> </td> <td valign="top" width="61%">Ndërprerja e procesit të ngarkimit dhe përpunimit të dokumentit.</td> </tr><tr><td valign="top" width="39%"><b>CreativeAtribute(emri)</b> </td> <td valign="top" width="61%">Krijon një atribut të ri me emrin e specifikuar për elementin aktual.</td> </tr><tr><td valign="top" width="39%"><b>createNode (Lloji, emri, nameSpaceURI)</b> </td> <td valign="top" width="61%">Krijon një nyje të llojit dhe emrit të specifikuar</td> </tr><tr><td valign="top" width="39%"><b>krijimi i elementit (emri i etiketës)</b> </td> <td valign="top" width="61%">Krijon një element dokumenti me emrin e specifikuar.</td> </tr><tr><td valign="top" width="39%"><b>CreativeTextNode(të dhënat)</b> </td> <td valign="top" width="61%">Krijon tekst brenda një dokumenti</td> </tr><tr><td valign="top" width="39%"><b>getElementsByTagName(emri i etiketës)</b> </td> <td valign="top" width="61%">Kthen një referencë për një koleksion të elementeve të dokumentit me emrin e dhënë</td> </tr><tr><td valign="top" width="39%"><b>nodeFromID(idString)</b> </td> <td valign="top" width="61%">Duke kërkuar për një element me ID</td> </tr></tbody></table><br><table cellspacing="0" cellpadding="4" width="500" border="1"><tbody><tr><td valign="top" colspan="2"> <b>Objekti XMLDOMNode</b> </td> </tr><tr><td valign="top" colspan="2">Një objekt XMLDOMNode që zbaton ndërfaqen bazë DOM <b>Nyja</b>, është menduar për manipulimin e një nyje të vetme të pemës së dokumentit. Karakteristikat dhe metodat e tij ju lejojnë të merrni dhe ndryshoni informacione të plota në lidhje me nyjen aktuale - llojin e saj, emrin, emrin e plotë, përmbajtjen e saj, listën e elementeve fëmijë, etj.</td> </tr><tr><td valign="top" colspan="2"><b>Vetitë</b> </td> </tr><tr><td valign="top" width=" "><b>Emri i nyjës, emri i bazës</b> </td> <td valign="top" width="65%">Kthen emrin e nyjes aktuale.</td> </tr><tr><td valign="top" width="35%"><b>parashtesë</b> </td> <td valign="top" width="65%">Kthen prefiksin e hapësirës së emrave.</td> </tr><tr><td valign="top" width="35%"><b>Lloji i të dhënave</b> </td> <td valign="top" width="65%">Përcakton llojin e përmbajtjes së nyjës aktuale</td> </tr><tr><td valign="top" width="35%"><b>nodeType, nodeTypeString</b> </td> <td valign="top" width="65%">Rikthen llojin e nyjes aktuale:</td> </tr><tr><td valign="top" width="35%"><b>atributet</b> </td> <td valign="top" width="65%">Kthen një listë të atributeve të nyjës aktuale si një koleksion i XMLDOMNamedNodeMap.</td> </tr><tr><td valign="top" width="35%"><b>teksti</b> </td> <td valign="top" width="65%">Kthen përmbajtjen e nënpemës aktuale si tekst</td> </tr><tr><td valign="top" width="35%"><b>xml</b> </td> <td valign="top" width="65%">Kthen një paraqitje XML të nënpemës aktuale.</td> </tr><tr><td valign="top" width="35%"><b>nyjaVlera</b> </td> <td valign="top" width="65%">Rikthen përmbajtjen e nyjës aktuale.</td> </tr><tr><td valign="top" width="35%"><b>Nyjet e fëmijës</b> </td> <td valign="top" width="65%">Kthen një listë të elementeve fëmijë si një XMLDOMNodeList.</td> </tr><tr><td valign="top" width="35%"><b>Fëmija i parë, fëmija i fundit</b> </td> <td valign="top" width="65%">Rikthen elementin e parë/të fundit fëmijë</td> </tr><tr><td valign="top" width="35%"><b>Vëllai i mëparshëm, vëllai tjetër</b> </td> <td valign="top" width="65%">Kthen elementin e mëparshëm/vëllait tjetër.</td> </tr><tr><td valign="top" width="35%"><b>prindNode</b> </td> <td valign="top" width="65%">Përmban një lidhje me elementin prind.</td> </tr><tr><td valign="top" width="35%"><b>Dokumenti i pronarit</b> </td> <td valign="top" width="65%">Kthen një tregues në dokumentin në të cilin ndodhet nyja aktuale.</td> </tr><tr><td valign="top" colspan="2"><b>Metodat</b> </td> </tr><tr><td valign="top" width="35%"><b>appendChild (fëmijë i ri)</b> </td> <td valign="top" width="65%">Shton një element të ri fëmijë në nyjen aktuale.</td> </tr><tr><td valign="top" width="35%"><b>futPara (fëmijë i ri, refFëmija)</b> </td> <td valign="top" width="65%">Fut një nyje fëmijë, duke e pozicionuar atë në nënpemën aktuale "në të majtë" të nyjes së specifikuar nga parametri refChild.</td> </tr><tr><td valign="top" width="35%"><b>cloneNode (thellë)</b> </td> <td valign="top" width="65%">Krijo një kopje të elementit aktual.</td> </tr><tr><td valign="top" width="35%"><b>merrniAtributin</b><b>(emri) <br> </b><b>getAttributeNode</b><b><span>(emri) <br>setAtribute (emri, vlera) <br>setAttributeNode (atribut XMLDOMA)</span> </b> </td> <td valign="top" width="65%">Qasja në atributet (krijoni, lexoni, shkruani) të një objekti. Emri është emri i atributit, vlera është vlera e tij. Kthen vlerën e një objekti XMLDOMAttribute.</td> </tr><tr><td valign="top" width="35%"><b>zëvendësojfëmijë (fëmijë i ri, fëmijë i vjetër) heq Fëmijë (fëmijë i vjetër)</b> </td> <td valign="top" width="65%">Zëvendëson objektin OldChild të listës aktuale të objekteve fëmijë me newChild. Fshirja e objektit OldChild</td> </tr><tr><td valign="top" width="35%"><b>selectNodes(patternString) selectSingleNode(patternString)</b> </td> <td valign="top" width="65%">Kthen objektin XMLDOMNodeList të zgjedhur nga modeli i kërkimit ose nyja e parë</td> </tr><tr><td valign="top" width="35%"><b>transformNode (fletë stili) <br>transformNodeToObject (fletë stili, outputObject)</b> </td> <td valign="top" width="65%">Cakton një fletë stili në nënpemën e nyjës aktuale dhe kthen një varg - rezultat i përpunimit. Një referencë për objektin DODOcument që përmban udhëzime XSL kalohet si parametër.</td> </tr></tbody></table><br><h2>Përdorimi i XML në biznes.</h2> <p>Për një pamje më të qartë, nevojitet një shpjegim se përse nevojitet e gjithë kjo për të kuptuar se si funksionon:</p> <p>Kur ndërtoni një sistem ERP B2B ose të korporatës, kur organizoni shkëmbimin e informacionit të dokumenteve XML midis ndërmarrjeve ose degëve të një kompanie, përdoret një sistem transferimi i informacionit i provuar në mënyrë efektive bazuar në serverët ekzistues WEB nëpërmjet protokolleve HTTP.</p> <p>Nga njëra anë, aplikacioni vepron si klient, i cili lëshon një kërkesë HTTP në modalitetin POST; nga ana tjetër, ekziston një server WEB, në anën e të cilit përpunohet kërkesa dhe jepet përgjigja. Dokumentet XML përdoren si shkëmbim.</p> <p>Për shembull, në një sistem të thjeshtë ERP të korporatës, një program kontabël (ASU Bukhuchet) duhet të gjenerojë një kërkesë të caktuar për lëshimin e një faturë dhe ta transferojë atë në një degë që ka një depo (ASU Warehouse). AWP Një formulim i ngjashëm i problemit kur krijon një sistem B2B, kur Ndërmarrja A kërkon disponueshmërinë e produkteve (vendos një porosi blerje) nga Furnizuesi B.</p> <p>Ndërmarrja A dhe programi i saj veprojnë si klient. Magazina mirëmbahet nga Furnizuesi B, i cili ka një kompleks të të dhënave të magazinës në një server SQL. Shkëmbimi kryhet përmes serverit WEB të korporatës së Furnizuesit B.</p> <p>Algoritmi i mëposhtëm tipik i shkëmbimit është paraqitur më poshtë:</p> <br>Figura 3. <ol><li><b>Ndërmarrja A</b> nis <b>procesi A</b>(porosi produkti), i cili vepron si klient WEB.</li><li><b>Procesi A</b> gjeneron një dokument XML (për shembull, një kërkesë faturë) dhe e transmeton atë si një kërkesë POST http te serveri WEB i Furnizuesit B. Identifikuesi i burimit të aplikacionit përpunues përdoret si një URI. URI mund të jetë i njëjtë për të gjitha llojet e dokumenteve, ose individual për secilin lloj. E gjitha varet nga struktura e serverit B2B (WEB).</li><li>Serveri WEB analizon kërkesën dhe gjeneron një server <b>Procesi B</b>, duke kaluar trupin e dokumentit XML si parametër. <br>Procesi B niset nga serveri WEB dhe përpunohet ose si një faqe ASP, një aplikacion CGI (ISAPI) ose një serverlet JAVA (aplikacion serveri)</li><li><b>Procesi B</b>- gjeneron një kërkesë për serverin e bazës së të dhënave SQL.</li><li>Serveri SQL kryen operacionet e nevojshme në bazën e të dhënave, gjeneron një përgjigje dhe e kthen atë <b>Procesi B</b>.</li><li>Bazuar në përgjigjen nga serveri SQL <b>Procesi B</b> gjeneron një dokument XML (përgjigje) dhe e kthen atë si përgjigje ndaj një kërkese http tek aplikacioni i klientit.</li><li>Më pas, në varësi të situatës në anën e klientit, ose krijohet një kërkesë e re http ose sesioni përfundon.</li> </ol><h2>Disa fjalë për organizimin e rrjedhës së dokumenteve.</h2> <p>Rregulli i përgjithshëm për zhvillimin e një sistemi të shkëmbimit të dokumenteve XML është:</p><ul><li><b>Së pari</b>- zhvillimi i diagramit të rrjedhës së dokumenteve elektronike dhe strukturës së tyre;</li><li><b>Së dyti</b>- zhvillimi i tabelave të funksioneve të procesit (nënproceseve), d.m.th. cilat funksionojnë në lidhje me cilin dokument XML do të zbatojë secili proces.</li> </ul><p>Çdo dokument XML, si një dokument HTML, duhet të përbëhet nga një kokë mesazhi (informacioni i mbyllur në etiketa) dhe një trup mesazhi (për një kërkesë, ky informacion është i mbyllur në etiketa për t'iu përgjigjur kërkesës). Në mënyrë që dokumenti XML të formohet saktë, është e nevojshme të kornizohen dy komponentët e tij "Header" dhe "Kërkesë" me etiketa, për shembull. Lloji i dokumentit standard është paraqitur më poshtë:</p> <p>Kreu (Figura 4), ndryshe nga një dokument HTML, duhet të përmbajë lloje të ndryshme të informacionit të shërbimit, duke përfshirë informacionin për llojin e dokumentit që transmetohet dhe procesin e përpunimit të tij. Trupi i dokumentit hyn në përpunimin e informacionit, d.m.th. përmbajtje e përshtatur nga etiketat. Duhet të theksohet se struktura e titujve duhet të jetë e njëjtë për të gjitha llojet e dokumenteve.</p> <p>Për një proces të nisur nga serveri, algoritmi i përpunimit preferohet (por jo domosdoshmërisht) të ndërtohet si më poshtë:</p> <img src='https://i2.wp.com/codenet.ru/np-includes/upload/2005/01/05/128666.jpg' height="500" width="408" loading=lazy loading=lazy><br>Figura 6. <h2>Disa pika themelore gjatë krijimit të pjesës së klientit</h2> <p>Siç është shpjeguar tashmë, kur krijoni një dokument XML, përdoret përfaqësimi i tij në formën e një modeli DOM. Më poshtë është një shembull i një pjese të tekstit Delphi të programit për krijimin e një titulli mesazhi xml.</p> <b>procedurë</b> TThread1.HeaderCreate(Dërguesi: Tobject); <b>var</b> <span>// deklarata e një koklase, e nevojshme për të krijuar</span> coDoc: CoDomDocument; <span>// Objekti XMLdomDocument</span> Doc: DomDocument; r: IXMLDOMElement; Nyja: IXMLDOMElement; // DOMText txt: IXMLDOMText; // DOMATtributi attr: IXMLDOMAttribute; <b>fillojnë</b> <span>// krijimi i një dokumenti DOM</span> Doc:=coDoc.Create; Doc.Set_async(false); <span>// inicimi fillestar i dokumentit DOM</span> Doc.LoadXML(" <Header/>"); <span>// krijimi i elementit DOME (etiketë<<b>Dërguesi</b>>) </span> Nyja:= Doc.createElement("Dërguesi"); <span>// krijoni një nyje teksti " <b>LLC "Typhoon"</b>" </span> txt:= Doc.createTextNode("Typhoon LLC"); <span>// caktimi në nyje<<b>Dërguesi</b>> vlera</span> <span>// nyja e tekstit " <b>LLC "Typhoon"</b>" </span> Nyja.appendChild(txt); <span>// duke shtuar një element<<b>Dërguesi</b>> në rrënjë të dokumentit si fëmijë</span> r.appendChild(Nyja); <span> <<b>Nga</b>> </span> Nyja:= Doc.createElement("Nga"); txt:= Doc.createTextNode ("http://tayfun.ru/xml/default.asp"); Nyja.appendChild(txt); r.appendChild(Nyja); <span>// operacione të ngjashme për etiketën<<b>te</b>> </span> Nyja:= Doc.createElement("Për"); txt:= Doc.createTextNode("http://irbis.ru"); Nyja.appendChild(txt); r.appendChild(Nyja); <span>// krijoni DOMElement()</span> Nyja:= Doc.createElement("TypeDocument"); <span>// krijimi i një nyje të atributit XMLDOMA</span> Att:= Doc.createAttribute("Id", "Order"); <span> // <TypeDocument Id="Order"/> </span> Nyja.appendChild(Att); r.appendChild(Nyja); <b>fundi;</b> <p>Duhet theksuar se deklarimi i variablit coDoc: CoDomDocument dhe Doc: DomDocument , si dhe krijimi i tij me metodën Create (Doc:=coDoc.Create;) kryhet një herë. Deklarata e ndryshores ndodhet në seksionin e deklarimit të ndryshores globale, dhe jo në procedurën lokale, siç u demonstrua për qartësi në këtë shembull (d.m.th., një variabël global i tipit DomDocument për modul programi).</p> <p>Rezultati i programit të mësipërm do të jetë titulli i krijuar, në lidhje me shembullin tonë të dokumentit xml: paraqitur në Figurën 5.</p> <img src='https://i1.wp.com/codenet.ru/np-includes/upload/2005/01/05/128662.gif' height="116" width="298" loading=lazy loading=lazy><br>Figura 5. <p><img src='https://i2.wp.com/codenet.ru/np-includes/upload/2005/01/05/128664.gif' height="179" width="385" loading=lazy loading=lazy><br>Figura 6.</p><p>Avantazhi kryesor i transmetimit të informacionit në formën e dokumenteve XML është se është e mundur të gjenerohet një mesazh duke përdorur struktura të pavarura të tabelës në DBMS në të dy anët marrëse dhe transmetuese. Duke përdorur shembullin tonë, le të themi se ju duhet të transferoni informacion në lidhje me faturat e Ndërmarrjes A nga një DBMS që ka strukturën e treguar në Figurën 6</p> <p>Për të gjeneruar një dokument xml që përmban një faturë, fillimisht ndërtohet një pyetje SQL (pyetja A) me informacione rreth vetë faturës:</p> <b>ZGJIDH</b>* NGA Fatura_General <b>KU</b> Numri i faturës = :num <b>ZGJIDH</b> Mallrat,Cilësia,Çmimi, HZ_cod <b>NGA</b> Mallrat <b>KU</b> Numri i faturës = :num <span>// :num - parametër që specifikon numrin e faturës.</span> <p>Më poshtë është një pjesë e programit që formon trupin e dokumentit xml:</p> <b>procedurë</b> TThread1.DataBodyCreate(Dërguesi: Tobject); <b>var</b> <span>// deklarimi i një koklase dhe një objekti XMLdomDocument</span>//coDoc: CoDomDocument ; <span>// duhet të jetë globale për të gjithë modulin.</span>//Doc: DomDocument ; <span>// deklarimi i objekteve DOMElement</span> r: IXMLDOMElement; // DOMElement; Nyja, Nyja2: IXMLDOMElement; Node3, Node4: IXMLDOMElement; // DOMText txt: IXMLDOMText; str: String; <span>// Numri i faturës: <b>numër i plotë;</b>- variabli global - // ka vlerën 987654 // queryA, queryB: <b>Varg;</b>- variabli global, // ka një vlerë që korrespondon me kërkesën // queryA - kërkesa Një informacion i përgjithshëm rreth faturës // queryB - kërko informacion B për mallrat e përshkruara në // faturë (shih tekstin)</span> <b>fillojnë</b> Pyetje.Mbyll; <span>// shiko tekstin "pyetja A"</span> Query.Text:= queryA; <span>// ekzekutoni kërkesën</span> Query.ExecSQL; Pyetje.Open; <span>// marrjen e adresës së elementit rrënjë</span> r:=Dokumenti.Get_documentElement; Node2:= Doc.createElement("Kërkesë"); <span>// krijoni DOMElement (etiketë)</span> Nyja:= Doc.createElement("Faturë"); <span>// duke shtuar një element në rrënjë</span> r.appendChild(Nyja2); <span>// duke shtuar një element në</span> Nyja 2. appendChild(Nyja); <span>// krijoni DOMElement (etiketë)</span> Node3:= Doc.createElement("Depurture"); <span>// duke shtuar një element në</span> Nyja. appendChild (Nyja 3); <span>// qasje në fushën "Depurture" të kërkesës</span> str:= Query.FieldByName("Depurture").AsString; <span>// krijimi i një nyje teksti = vlera e fushës</span><span>// duke i caktuar një vlerë nyjes</span> <span>// nyje teksti, variabli str</span> Nyja.appendChild(txt); <span>// operacione të ngjashme për etiketën <Destination>, <DataSend>, // <DataDepurture>, <Currency> // <DestinationCompany>(Fusha e DB "Marrësi")</span> Nyja:= Doc.createElement("Destinacioni"); <span>// emri i fushës së bazës së të dhënave mund të mos përkojë me emrin</span> str:= Query.FieldByName("Marrësi").AsString; <span>etiketa //, ky është avantazhi i përdorimit</span> txt:= Doc.createTextNode(str); <span>// DOM i ndërfaqes përpara një DBMS që mbështet një ndërfaqe XML, // si ORACLE 8i ose Ms SQL 2000</span> Nyja.appendChild(txt); ... <span>// gjenerimi i një kërkese për specifikimet për mallrat</span> <span>// mbyll kërkesën për qasje</span> Pyetje.Mbyll; <span>// shih në tekstin "kërkesa B", informacion. Rreth produkteve</span> Pyetje.Text:= pyetës; <span>// caktimi i vlerave të parametrave</span> Query.Params.AsInteger:=Numri i faturës; <span>// ekzekutoni kërkesën</span> Query2.ExecSQL; <span>// hapja e aksesit për të kërkuar të dhëna</span> Pyetje.Open; <span>// krijoni DOMElement (etiketë)</span> Node3:= Doc.createElement("Imems"); <span>// duke shtuar një element në</span> Nyja. appendChild (Nyja 3); <span>// kaloni nëpër të gjitha linjat e pyetjeve</span> <b>derisa</b> <b>jo</b> Eof.Pyetje <b>bëj</b> start Node4:= Doc.createElement("Imem"); <span>// duke shtuar një element në</span> Node3.appendChild(Node4); <span>// gjenerimi i të dhënave për etiketën</span> str:= Query.FieldByName("Çmimi").AsString; txt:= Doc.createTextNode(str); Nyja.appendChild(txt); ... <span>// operacione të ngjashme për etiketat <HZ_Cod>, <Quality>, <GoodName> </span> <b>fundi;</b> <b>fundi;</b> <p>Si rezultat i kësaj procedure, krijohet teksti i mëposhtëm i dokumentit 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>Për të formuar një kërkesë, përdoret metoda Open e objektit <b>IXMLHttpKërkesë</b>:</p> <b>procedurë</b> Open(const bstrMethod, - lloji i metodës ="POST" bstrUrl, - Adresa e serverit Url varAsync, - mënyra e komunikimit asinkron/sinkron = bstrUser i vërtetë, - emri i përdoruesit për vërtetimin bstrFjalëkalimi) - fjalëkalimi <h2>Krijimi i një pjese të serverit të përpunimit të dokumenteve</h2> <p>Siç u përmend më herët, përpunimi i kërkesave HTTP mund të bëhet ose nga aplikacionet CGI ose nga serverët Java. Është gjithashtu e mundur të shkruhen faqe ASP. Por në këtë rast, transferimi i të dhënave është i mundur vetëm duke përdorur metodën "GET" përmes një vargu pyetësor. Megjithëse, përpunimi i kërkesave HTTP për faqet ASP është më efikas sesa për një aplikacion CGI. Sidoqoftë, për mendimin tim, nuk ka dallim se si të përpunohet, por ajo që është më e rëndësishme është të zgjidhet pyetja - si të ndërtohet një program përpunimi, dhe jo me çfarë mjetesh.</p> <p>Nëse nga kapitulli i mëparshëm kemi parë opsionet për gjenerimin e një dokumenti XML, atëherë detyra e aplikacionit të serverit është e kundërta - analizimi i dokumenteve XML. Më poshtë është një pjesë e programit që analizon dokumentin xml:</p> <b>procedurë</b> Tthread1.DataParser(Dërguesi: Tobject); <b>var</b> <span>// deklarimi i objekteve DOMElement</span> r,FNode: IXMLDOMElement; Str, Emri i skedarit: String; parm: Varg; <span>// deklarimi i një koklase dhe</span> CoDocXML, CoDocXSL, CoDocResult: CoDomDocument ; <span>// Objekti XMLdomDocument</span> XMLDoc, XSLDoc, ResultDoc: DomDocument; <span>// HttpStr: String; - variabla globale që përmban vargun e kërkesës HTTP</span> <b>Filloni</b> XMLDoc:=coDocXML.Krijo; XMLDoc.LoadXML(HttpStr); <span>// marrjen e adresës së elementit rrënjë</span> r:=Dokumenti.Get_documentElement; <span>// duke marrë vlerën e elementit</span> FNode:= r.SelectSingleNode("//TypeDocument"); <span>// duke marrë vlerën e atributit id="Urdhër"</span> Emri i skedarit:= FNode.GetAttibute("id"); <span>// dhe duke formuar emrin e skedarit Order.xsl</span> Emri i skedarit:= Emri i skedarit+".xsl"; <span>// krijoni një dokument XSLDoc</span> XSLDoc:=coDocXSL.Krijo; XSLDoc.LoadXML(Emri i skedarit); <span>// krijoni një dokument XMLDoc</span> ResultDoc:=coDocResult.Create; <span>// vendosja e mënyrës së përpunimit sinkron</span> ResultDoc.Set_async(false); <span>// vendos kontrollin e analizës</span> ResultDoc.validateOnParse:= e vërtetë; <span>// analizoni XMLDoc duke përdorur një shabllon XSL</span> XMLDoc.transformNodeToObject(XSLDoc, ResultDoc); <span>// ndryshores Str i caktohet një vlerë teksti</span> <span>// dokumenti që rezulton.</span> Str:= ResultDoc.text; <span>// kërkoni për elementin</span> FNode:= r.SelectSingleNode("//Numri i faturës"); <span>// dhe duke marrë vlerën e elementit</span> parm:= FNode.text; <span>// mbyll kërkesën për qasje</span> Pyetje.Mbyll; Query.Text:= Rr; <span>// caktimi i një vlere parametri</span> Query.Params.AsString:= parm; <span>// ekzekutoni kërkesën</span> Query.ExecSQL; <b>fundi;</b> <p>E gjithë pika kryesore e analizës është përdorimi i një shablloni XSL, i cili gjenerohet individualisht për çdo lloj dokumenti. Rezultati i analizimit është një varg pyetjesh SQL. Më pas, ekzekutimi i vargut të kërkuar të gjeneruar SQL do të bëjë ndryshimet e nevojshme në të dhënat në DBMS.</p> <p>Avantazhi i përdorimit të analizës përmes një shablloni është se të dhënat janë disi fleksibël dhe funksionimi i algoritmit është plotësisht i pavarur nga kodi i programit. Më poshtë është teksti i shabllonit XSL i përdorur për të përpunuar një dokument ORDER:</p><p> <!-- файл Order.xsl --> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <xsl:for-each select="//header">INSERT në TABREG (FROM, TE, TYPEDOC,trup) VALUES(" <xsl:value-of select="from" />", "<xsl:value-of select="to" />", "<xsl:value-of select="TypeDocument/@id" />") </xsl:for-each> <xsl:for-each select="//item">INSERT në MALLRA (Numri i faturës, emri, çmimi, cilësia) VALUES(" :num", " <xsl:value-of select="name" />", "<xsl:value-of select="price" />", "<xsl:value-of select="quality" /> ") </xsl:for-each> </xsl:template> </xsl:stylesheet> </p><p>Duke shpjeguar shembullin e mësipërm, duhet theksuar se përdorimi i një palë etiketash është i një natyre formale, sepse pas analizimit, dokumenti XML që rezulton duhet të përmbajë zyrtarisht të paktën një nyje. Metoda ResultDoc.text cakton vlerën e tekstit të dokumentit ResultDoc XML të marrë gjatë analizimit. Në këtë rast, vlera është gjithçka që është e përshtatur nga një palë etiketash dhe, d.m.th. Pyetja SQL që krijuam.</p> <p>Një veçori tjetër e shkrimit të një programi është mundësia e përdorimit të një parametri SQL <b>:num.</b> Përdorimi i këtij parametri ju lejon të thjeshtoni tekstin e shabllonit xsl. Përcaktimi i kuptimit të elementeve përkatëse të nyjës së një dokumenti XML përcaktohet duke zgjedhur fillimisht emrin e nyjes përkatëse, për shembull:</p><h2>Shkurtimisht rreth XSL</h2> <p>Shkurtesa XSL vjen nga eXtensible Stylesheet Language - një gjuhë për formatimin e fletëve të stilit (të dhënat XML). Siç sugjeron titulli, Gjuha e fletës së stilit eXtensible (XSL) përdoret për të formatuar të dhënat XML. Sipas përkufizimit të W3C, XSL përbëhet nga dy pjesë:</p> <ul><li>XSLT - Transformimi XSL. Një gjuhë e përdorur për të konvertuar ose formatuar (transformuar) dokumente XML. Kështu, me ndihmën e XSLT ne mund të marrim seksione të ndryshme të grupit të të dhënave dhe forma të paraqitjes së të dhënave.</li><li>Elementet e formatimit. Këta elementë përfshijnë të gjithë elementët e dizajnit tipografik të të dhënave, pasi ato të jenë përpunuar duke përdorur XSL. Përdoret vetëm për të gjeneruar faqe HTML.</li> </ul><p>Duke përdorur XSLT, ne mund të zgjedhim të dhënat që na nevojiten nga një skedar XML dhe t'i rregullojmë ato në një formë për t'i paraqitur përdoruesit. Për shembull, në rastin tonë, ne i konvertuam të dhënat XML në një pyetje SQL. Përdorimi klasik i XSL është, si rregull, formatimi i të dhënave në formën e faqeve HTML ose, më rrallë, në formën e skedarëve RTF.</p> <p>Skedari XSL përshkruan shabllonin sipas të cilit do të konvertohen të dhënat XML. Duke u kthyer te shabllonet xsl, elementët (direktivat) e mëposhtme mund të dallohen në XSLT:</p> <table cellspacing="0" cellpadding="4" width="500" border="1"><tbody><tr><td valign="top" width="31%"> <b>Direktivat XSL</b> </td><th align="middle" width="69%"> <b>përshkrim</b> </th> </tr><tr><td>xsl:apply-templates</td> <td>Direktiva që tregon aplikimin e shablloneve përkatës në atributin select="emri i shabllonit".</td> </tr><tr><td>xsl: atribut</td> <td>krijon një pemë atribute dhe e shton atë në elementin dalës, parametri emri = "emri i atributit", emri - URI në hapësirën e emrave (prefiksi i hapësirës së emrit)</td> </tr><tr><td>xsl:call-template</td> <td>thërret shabllonin, emrin e atributit = "URI në shabllon"</td> </tr><tr><td>xsl: zgjidhni <br>xsl: kur <br>xsl: ndryshe</td> <td>duke bërë një përzgjedhje bazuar në xsl:when expr="vlerësimi i një shprehjeje në një skenar", <br>gjuha = "emri i gjuhës" <br>test = "shprehje e vlerësuar"</td> </tr><tr><td>xsl: koment</td> <td>gjeneron një koment në dokumentin dalës</td> </tr><tr><td>xsl: kopje <br>xsl: kopje e</td> <td>kopjon nyjen aktuale në burimin e daljes ose ngjit një fragment dokumenti në nyjen ku atributi zgjidhni = "emri i nyjes së burimit"</td> </tr><tr><td>xsl: element</td> <td>krijon një element dalës sipas emrit, emri i atributit = "emri i elementit", namespace = referencë për hapësirën e emrit"</td> </tr><tr><td>xsl:për-secilin</td> <td>riaplikon shabllonin për të gjitha nyjet në listën e nyjeve, atributi select specifikon listën e nyjeve</td> </tr><tr><td>xsl: nëse</td> <td>duke kontrolluar gjendjen, të specifikuar nga atributi test si shprehje</td> </tr><tr><td>xsl: include</td> <td>përfshin shabllonin e jashtëm, href = atributin "URI reference".</td> </tr><tr><td>xsl: output</td> <td>specifikon rezultatin e daljes, atributi i metodës mund të ketë vlerat "xml", "html" ose "tekst"</td> </tr><tr><td>xsl:param</td> <td>specifikon vlerën e parametrave, emri i atributit = "emri i parametrit", zgjidhni = "vlera"</td> </tr><tr><td>xsl:processing-instruction</td> <td>krijon një instruksion përpunimi, emri i atributit = emri i udhëzimit të procesit</td> </tr><tr><td>xsl: sort</td> <td>rendit nyje të shumta, atributet zgjidhni = "emri i nyjes", lloji i të dhënave = lloji i të dhënave ("tekst" | "numri" | Qname), renditja = drejtimi i renditjes ("në ngjitje" | "zbritje")</td> </tr><tr><td>xsl: fletë stili</td> <td>përcakton një dokument shabllon xsl, është elementi rrënjë për XSLT</td> </tr><tr><td>xsl: shabllon</td> <td>përcakton një shabllon xsl, emri i atributit = "Prefiksi URI i emrit të shabllonit", përputhet = "tregues i nyjës në të cilën aplikohet shablloni"</td> </tr><tr><td>xsl: tekst</td> <td>gjeneron tekst në rrjedhën e daljes, atributi disable-output-scaping = "po" ose "jo", tregon aftësinë për të gjeneruar karaktere ESC</td> </tr><tr><td>xsl:value-of</td> <td>fut vlerën e nyjës së zgjedhur si tekst, atributin select = "pointer to node" nga e cila është marrë vlera</td> </tr><tr><td>xsl: variabël</td> <td>specifikon vlerën e kufijve të ndryshoreve, emri i atributit = "emri i ndryshores", zgjidhni = "llogaritja e vlerës së ndryshores"</td> </tr><tr><td>xsl:with-param</td> <td>aplikon një parametër në një shabllon, atributi i emrit = "emri i parametrit", zgjidhni = shprehje për të vlerësuar kontekstin aktual, vlera e paracaktuar "."</td> </tr></tbody></table><h2>konkluzioni</h2> <p>Së fundi, duhet theksuar se përdorimi i një analizuesi standard XML <i>msxml.dll</i> nuk është mjeti i vetëm për analizimin dhe krijimin e dokumenteve XML. Për shembull, për të krijuar dokumente XML është efektive të përdoren komponentë <b>TPageProduser</b> Dhe <b>TTableProdhuesi</b>. Por, ky artikull vetëm thekson gjerësinë dhe mundësinë e përdorimit të modelit DOM në praktikë.</p> <p>Autori do të jetë shumë mirënjohës për reagimet në lidhje me rëndësinë e temës, përmbajtjen e përgjithshme, stilin e prezantimit, si dhe të gjitha komentet e tjera që do të ndihmojnë në përmirësimin e mëtejshëm të cilësisë së shkrimit të një koleksioni artikujsh dhe botimit të një libri që mbulon temën. të anës praktike të përdorimit të dokumenteve XML në tregtinë elektronike. Informacion më të detajuar në lidhje me anën praktike të përdorimit të dokumenteve elektronike mund të gjenden në faqen e internetit të autorit www.eDocs.al.ru Gjithashtu është planifikuar të postohen tekste burimore dhe shembuj në faqen e internetit të autorit.</p> <p>Porositni ZGJIDHJET E PROBLEMIT NË DELPHI <br>Delphi është gjuha e dytë më e rëndësishme e programimit me të cilën studentët njihen më shpesh gjatë studimeve të tyre. Ky është fillimi i mësimit të programimit të orientuar drejt objektit. Si student, arrita në përfundimin se nuk ka mënyrë më të lehtë për të zotëruar një gjuhë sesa për të shkruar një makinë llogaritëse në të. Edhe nëse zbatoni një funksion bazë për shtimin e dy numrave, kjo do të hedhë dritë mbi shumë.</p> <p>CodeGaear, Delphi 7, Lazarus janë përpilues të ndryshëm, programe që do të transferojnë kodin që shkruani në makinë, duke e kthyer atë në zero dhe një. Të gjitha këto janë programe për krijimin e programeve, jo gjuhë të veçanta programimi. Këta përpilues përdorin gjuhën e programimit Object Pascal, e cila është baza e gjuhës Delphi, e cila është e ngjashme në sintaksë me Pascalin e rregullt, por funksionalisht ndryshon ndjeshëm. <br></p> <h2>Çfarë është sintaksa e gjuhës së programimit?</h2> <p>Ky është formati për të shkruar operatorë të ndryshëm. Për shembull, një cikli "for" në Pascal ka formatin e mëposhtëm: "për n:=1 deri në k do", etj.</p><p>Në gjuhën e programimit C++, i njëjti cikël shkruhet pak më ndryshe: për (n = 1; n Ne shkruajmë një kalkulator</p><p>Kjo do t'ju japë një kuptim se si objektet ndërveprojnë me kodin e programit, çfarë janë "variablat" dhe si funksionojnë funksionet matematikore. Çdo programim do të jetë një llogaritje në çdo rast. Një lojë është gjithashtu një program që llogarit vazhdimisht diçka, punon me numra dhe funksione numerike. Programimi është i pandashëm nga matematika.</p> <p>Ne do të përdorim mjedisin e zhvillimit Lazarus për të shkruar. Funksionaliteti i tij nuk është aq i pasur sa, të themi, CodeGear, por është i disponueshëm falas dhe i destinuar për të mësuar.</p><p>Duke hapur mjedisin e zhvillimit, ne shohim një formë dhe një shirit veglash. Këtu është formulari.</p> <p><img src='https://i0.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-24.jpg' width="100%" loading=lazy loading=lazy></p><p>Këtu është paneli i elementeve.</p><p>Gjëja e parë që do të bëjmë është të mbledhim tre elementët që na nevojiten për të zbatuar funksionin e mbledhjes së dy numrave. Ju duhet: “Tedit” në sasinë prej tre pjesësh dhe “TButton”. Në foton më poshtë ato janë paraqitur në panel me shigjeta. I klikojmë një herë, pastaj një herë në formular dhe ato shfaqen në të.</p><p>Këto janë fusha të futjes së tekstit dhe një buton i rregullt. Këto elemente i hasni kur përdorni pothuajse çdo program Windows. Hidhi nje sy.</p><p><img src='https://i1.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-27.jpg' width="100%" loading=lazy loading=lazy><br></p> <p>Tani le t'i pastrojmë këto mbishkrime. Klikoni skedën Shiko. Dhe klikoni në "Inspektori i objekteve". Do të shfaqet një dritare si kjo.</p><p><img src='https://i2.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-28.jpg' width="100%" loading=lazy loading=lazy></p><p>Ne klikojmë një herë në elementin tonë "Button" në formular dhe ndryshojmë vlerën "Caption" në dritaren e inspektorit në ndonjë tjetër. Për shembull, fjala "Ok". Shtypni Enter. Ne shohim në formular se si elementi ka ndryshuar emrin e tij.</p><p>Ne do të bëjmë të njëjtën gjë me Editat, por nuk do t'i riemërtojmë, por do t'i bëjmë pa përmbajtje. Zgjidhni ato një nga një dhe pastroni vlerën e tekstit në inspektor. Mos harroni të shtypni 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>Si rezultat, forma jonë duket kështu.</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>Tani, që kalkulatori ynë të funksionojë, duhet të shkruajmë kodin e nevojshëm të programit për procedurën e butonit tonë. Klikoni dy herë në elementin Button dhe hapni redaktorin e kodit burimor.</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>A e shikon? Butoni i procedurës 1 Kliko. Kjo është një procedurë që është përgjegjëse për atë që do të ndodhë kur shtypim butonin një herë. Dhe duhet të ndodhë si më poshtë: programi duhet të shfaqë në të tretën Redakto shumën e numrave të futur në dy fushat e para. Ne shkruajmë kodin.</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>Duhet të shkruajmë 5 rreshta kaq të thjeshtë kodi. Komentet dhe shpjegimet janë të dukshme në foton e mësipërme. Pas kësaj, klikoni këtë buton.</p> <p>Projekti ynë do të përpilohet. Do të përpilohet në një program. Fusim numrat në dy fushat e para, klikojmë në butonin dhe marrim vlerën e shumës.</p><p><img src='https://i2.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-34-2.jpg' width="100%" loading=lazy loading=lazy></p> <h2>konkluzioni</h2> <p>Mund të klikoni butonin "File", më pas "Ruaj të gjitha", zgjidhni një dosje për të ruajtur dhe do të keni një program të plotë që mund të niset nga desktopi. Tani përpiquni të kuptoni vetë se çfarë duhet të rishkruhet në këtë kod në mënyrë që programi të ndajë dy numra në vend që t'i shtojë ato. Këshillë: Duhet të ndryshoni llojin e të dhënave. Videoja më poshtë tregon një shembull të ngjashëm, por në Delphi 7, jo Lazarus.</p><p><span class="6qR5tjJKK3g"></span></p> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast?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 class="moduletable"> <div class="custom"> <div id="yandex_rtb_R-A-173290-2"></div> </div> </div> <div class="moduletable"> <div class="dopzagl">Materialet tematike:</div> <div class="row-fluid dopmat"> <div class="span3"> <div class="image-feat"> <a href="https://3dgosha.ru/sq/windows-7/mozhno-li-udalit-svoyu-stranicu-v-kontakte-kak-udalit-stranicu-v-kontakte.html"> <img src="/uploads/bc832d925b6ff428b46561908e0a3483.jpg" alt="Si të fshini një faqe në një kontakt?" title="Si të fshini një faqe në një kontakt?" / loading=lazy loading=lazy> </a> </div> <header> <a href="https://3dgosha.ru/sq/windows-7/mozhno-li-udalit-svoyu-stranicu-v-kontakte-kak-udalit-stranicu-v-kontakte.html">Si të fshini një faqe në një kontakt?</a> </header> </div> <div class="span3"> <div class="image-feat"> <a href="https://3dgosha.ru/sq/office/kak-zapustit-adobe-flesh-pleer-v-hrome-adobe-flash-player-kak-vklyuchit.html"> <img src="/uploads/273da225d2c5a57c41c0fe5a8e51e202.jpg" alt="Adobe Flash Player: si ta aktivizoni" title="Adobe Flash Player: si ta aktivizoni" / loading=lazy loading=lazy> </a> </div> <header> <a href="https://3dgosha.ru/sq/office/kak-zapustit-adobe-flesh-pleer-v-hrome-adobe-flash-player-kak-vklyuchit.html">Adobe Flash Player: si ta aktivizoni</a> </header> </div> <div class="span3"> <div class="image-feat"> <a href="https://3dgosha.ru/sq/iron/eksel-kak-vstavit-v-yacheiku-razryv-stroki-perenos-strok.html"> <img src="/uploads/6d0ddf88d81fb4ea2394855f9c8a4a5c.jpg" alt="Mbështillni linjat e tekstit në një qelizë Excel" title="Mbështillni linjat e tekstit në një qelizë Excel" / loading=lazy loading=lazy> </a> </div> <header> <a href="https://3dgosha.ru/sq/iron/eksel-kak-vstavit-v-yacheiku-razryv-stroki-perenos-strok.html">Mbështillni linjat e tekstit në një qelizë Excel</a> </header> </div> <div class="span3"> <div class="image-feat"> <a href="https://3dgosha.ru/sq/office/ustanovka-platformy-1s-8-3-ustanovka-platformy-obnovlenie-platformy.html"> <img src="/uploads/6fa334e5ebec1137fd046dad9460bca1.jpg" alt="Instalimi i platformës 1s 8" title="Instalimi i platformës 1s 8" / loading=lazy loading=lazy> </a> </div> <header> <a href="https://3dgosha.ru/sq/office/ustanovka-platformy-1s-8-3-ustanovka-platformy-obnovlenie-platformy.html">Instalimi i platformës 1s 8</a> </header> </div> <div class="span3"> <div class="image-feat"> <a href="https://3dgosha.ru/sq/programs/clovar-abbi-lingvo-onlain-abbyy-lingvo-onlain-slovar-kotoryi.html"> <img src="/uploads/af5c7de4eccd38d89c81b9dbdb7c38b6.jpg" alt="ABBYY Lingvo është një fjalor online që do t'i ndihmojë të gjithë!" title="ABBYY Lingvo është një fjalor online që do t'i ndihmojë të gjithë!" / loading=lazy loading=lazy> </a> </div> <header> <a href="https://3dgosha.ru/sq/programs/clovar-abbi-lingvo-onlain-abbyy-lingvo-onlain-slovar-kotoryi.html">ABBYY Lingvo është një fjalor online që do t'i ndihmojë të gjithë!</a> </header> </div> <div class="span3"> <div class="image-feat"> <a href="https://3dgosha.ru/sq/windows-10/pochemu-telekanaly-ne-pokazyvayut-pochemu-ne-pokazyvaet-kanal-chto.html"> <img src="/uploads/77be3143fb1ab1a907fda05515ae6ffb.jpg" alt="Pse kanali nuk tregon se çfarë duhet të bëni?" title="Pse kanali nuk tregon se çfarë duhet të bëni?" / loading=lazy loading=lazy> </a> </div> <header> <a href="https://3dgosha.ru/sq/windows-10/pochemu-telekanaly-ne-pokazyvayut-pochemu-ne-pokazyvaet-kanal-chto.html">Pse kanali nuk tregon se çfarë duhet të bëni?</a> </header> </div> <div class="span3"> <div class="image-feat"> <a href="https://3dgosha.ru/sq/mobile-devices/skachat-sniffer-na-russkom-yazyke-sniffery-sniffers-preobrazovanie.html"> <img src="/uploads/a8e35122633b3581958d2f0ba4f023fe.jpg" alt="Shkarkoni Sniffer në Rusisht" title="Shkarkoni Sniffer në Rusisht" / loading=lazy loading=lazy> </a> </div> <header> <a href="https://3dgosha.ru/sq/mobile-devices/skachat-sniffer-na-russkom-yazyke-sniffery-sniffers-preobrazovanie.html">Shkarkoni Sniffer në Rusisht</a> </header> </div> <div class="span3"> <div class="image-feat"> <a href="https://3dgosha.ru/sq/windows-8/kak-naiti-poteryannyi-fail-sovety-chainikam-ili-kak-vosstanovit-uteryannye.html"> <img src="/uploads/48565c8770b9a297eff1b05d5b538c61.jpg" alt="Këshilla për dummies, ose si të rikuperoni skedarët e humbur në Windows Si të gjeni skedarë për skedarët e humbur" title="Këshilla për dummies, ose si të rikuperoni skedarët e humbur në Windows Si të gjeni skedarë për skedarët e humbur" / loading=lazy loading=lazy> </a> </div> <header> <a href="https://3dgosha.ru/sq/windows-8/kak-naiti-poteryannyi-fail-sovety-chainikam-ili-kak-vosstanovit-uteryannye.html">Këshilla për dummies, ose si të rikuperoni skedarët e humbur në Windows Si të gjeni skedarë për skedarët e humbur</a> </header> </div> </div> </div> </p> <div class="article-info muted"> <div class="modified"> <span class="icon-calendar"></span> Përditësuar: 18.02.2023</div> <div class="hits"> <span class="icon-eye-open"></span> 103583 </div> </div> <div class="proofreader_prompt">Nëse vëreni një gabim, zgjidhni një pjesë të tekstit dhe shtypni Ctrl+Enter</div> </div> <div class="sharecont img-rounded"> <span class="lin">SHPËRNDAJE:</span> <div class="share42init" data-url="" data-title=""></div> <script type="text/javascript" src="/templates/vyborovednew/js/share42/share42.js"></script> </div> </div> <div class="span3 mainfreim"> <div class="moduletable"> <h3>Titujt e faqeve</h3> <ul class="nav menu"> <li class="item"><a href="https://3dgosha.ru/sq/category/windows-10/" title="Windows 10">Windows 10</a></li> <li class="item"><a href="https://3dgosha.ru/sq/category/internet-wifi/" title="Internet, Wi-Fi">Internet, Wi-Fi</a></li> <li class="item"><a href="https://3dgosha.ru/sq/category/useful/" title="E dobishme">E dobishme</a></li> <li class="item"><a href="https://3dgosha.ru/sq/category/windows-7/" title="Windows 7">Windows 7</a></li> <li class="item"><a href="https://3dgosha.ru/sq/category/errors/" title="Gabimet">Gabimet</a></li> <li class="item"><a href="https://3dgosha.ru/sq/category/iron/" title="Hekuri">Hekuri</a></li> <li class="item"><a href="https://3dgosha.ru/sq/category/windows-xp/" title="Windows XP">Windows XP</a></li> <li class="item"><a href="https://3dgosha.ru/sq/category/printers/" title="Printera">Printera</a></li> <li class="item"><a href="https://3dgosha.ru/sq/category/windows-8/" title="Windows 8">Windows 8</a></li> <li class="item"><a href="https://3dgosha.ru/sq/category/programs/" title="Programet">Programet</a></li> <li class="item"><a href="https://3dgosha.ru/sq/category/treatment-of-viruses/" title="Trajtimi i viruseve">Trajtimi i viruseve</a></li> </ul> </div> <div class="moduletableadvert"> <div class="customadvert"> <center> </center> </div> </div> </div> </div> </div> </div> </div> <div class="container-fluid"> <div class="row-fluid"> <div class="span12 bottomarrow"> <div class="topbegr futerdesktop"> <div class="container"> <div class="row-fluid"> <div class="span4 center"><a href="https://3dgosha.ru/sq/" ><img src="/uploads/logo.svg?1" alt="Kompjuterë dhe pajisje moderne" / loading=lazy loading=lazy></a> </div> <div class="span8"> <div class="span12 menufuter center"> <ul class="nav menu"> <li><a class="str" href="https://3dgosha.ru/sq/">në shtëpi</a></li> <li><a class="but" href="">Rreth revistës</a></li> <li><a class="otz" href="https://3dgosha.ru/sq/feedback.html">Kontaktet</a></li> <li><a class="vopr" href="">Reklamim</a></li> </ul> <div class="span12 futercopir center"><div style="float:left; width:90%;">E drejta e autorit © 2023 3dgosha.ru - Kompjuterë dhe pajisje moderne</div> <div style="float:right; width:10%;"> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <script type="text/javascript"> (function($) { $.lockfixed(".moduletableadvert",{ offset: { top: 10, bottom: 10} }); } )(jQuery); </script> <div id="proofreader_container" class="proofreader_container" style="display:none;"></div></body> </html>