Ինչպե՞ս աշխատել XML փաստաթղթերի հետ Delphi-ում: Մասնավորապես, օգտագործելով TXMLDocument-ը: Օգտագործելով XML փաստաթղթի օբյեկտի մոդելը:

Delphi-ի շատ ծրագրավորողների համար կարգավորումների պահպանումը կապված է օգտագործման հետ INIֆայլեր ձեր ծրագրերում: Այս մեթոդի օգտագործումը քիչ թե շատ լուրջ նախագծերում պետք է խուսափել, քանի որ այն սահմանափակում է ճկունությունը, ինչը խոչընդոտում է ծրագրի հետագա ընդլայնմանը։ Հարկ է նշել, որ այս մոտեցումը բավականին տարածված է՝ շնորհիվ իր հեշտ օգտագործման և զարգացման միջավայրում ներկառուցված գործիքների առկայության:

Այնուամենայնիվ, ծրագրի պարամետրերը պահելու իդեալական տարբերակը կառուցվածքային է XMLֆայլեր։ Նրանց առավելությունն այն է, որ պարամետրերի քանակը կարող է չֆիքսվել: Սա ավելի լավ հասկանալու համար եկեք դիտարկենք կոնկրետ օրինակ:

USearch ծրագրում, երբ սեղմում եք մուտքի վրա, հայտնվում է համատեքստային մենյու, որտեղ ցուցադրվում է տարրերի ցանկը: Այս տարրերը հրամաններ են, որոնք իրենց հերթին բեռնվում են պարամետրերի ֆայլից: Եթե ​​կարգավորումները պահվել են INIֆայլը, ծրագիրը կարող է պահպանել և բեռնել որոշակի թվով հրահանգներ, օրինակ՝ 10 կամ 50: Հենց որ ավելի մեծ արժեք պահանջվի, կոդը պետք է վերաշարադրվի և համապատասխանաբար վերակազմավորվի:


Մոտեցման ընդունումը օգտագործելով XMLֆայլեր, մենք կկարողանանք դինամիկ կերպով բեռնել բաժնի բոլոր պարամետրերը: Այս ամենի համար կոնֆիգուրացիայի ֆայլը կդառնա ավելի էլեգանտ՝ առանց պարամետրերի ավելորդ համարակալման: Այնուամենայնիվ, ստանդարտ միջոցներհետ աշխատելու համար XMLԴելֆիում ունեն բազմաթիվ թերություններ, ուստի խորհուրդ եմ տալիս օգտագործել ստանդարտ գրադարան MSXML. Այն սովորաբար ներառված է լռելյայն օպերացիոն համակարգեր Windows ընտանիք.


Միացնել MSXML, մենք պետք է ստեղծենք ինտերֆեյսի ֆայլ՝ բոլոր գործառույթների ցանկով՝ ներմուծելով այն COM սերվերից։ Ինչպես ներմուծել ինտերֆեյս, բավականին մանրամասն հոդվածներ են գրվել, բայց առաջարկում եմ ներբեռնել ֆայլը MSXML2_TLB.PASարդեն պատրաստ է օգտագործման: Ֆայլը ներբեռնելուց հետո դրեք այն ձեր նախագծի կողքին կամ գցեք այն Delphi միջավայրի lib թղթապանակում: Այսպիսով, բոլոր ստեղծված ծրագրերը կկարողանան օգտվել մոդուլից MSXML, դուք պարզապես պետք է ավելացնեք MSXML2_TLB տողը օգտագործման համար:

Պարզության համար դիտարկեք այս գրադարանի օգտագործման հետևյալ օրինակը.

LoadProcedureData; var XMLDoc՝ DODocument; Արմատը՝ IXMLDOMElement; սկսել XMLDoc:= CoDOMDocument.Create; XMLDoc.Load ("settins.xml"); Արմատ:= XMLDoc.DocumentElement; ShowMessage(Root.SelectSingleNode(«չափ/լայնություն»).Text); Արմատ:= զրոյական; XMLDoc:= զրոյական; վերջ;

Նախ, ստեղծվում է DODocument դասի օրինակ, այնուհետև settings.xml ֆայլի բովանդակությունը բեռնվում է հիշողության մեջ: Քանի որ ստանդարտի համաձայն ցանկացած XMLֆայլը պետք է պարունակի արմատային պիտակ (in այս դեպքը կազմաձևում), ապա մենք պետք է ստանանք այն՝ օգտագործելով ֆունկցիան Փաստաթղթի տարր. Այնուհետև ցուցադրվում է պիտակների միջև եղած բովանդակությունը , որոնք իրենց հերթին գտնվում են պիտակների միջև . Այսպիսով, settings.xml ֆայլից մեր մեթոդը կցուցադրի տեքստը MessageBox-ում «100px».

500px 100px

Այստեղ օգտագործվում է SelectSingleNode մեթոդը, որը որպես պարամետր վերցնում է տողը

Չնայած այն հանգամանքին, որ Դելֆիում XML-ի հետ աշխատելու թեման լայնորեն քննարկվել է ինտերնետում, այս թեմայի վերաբերյալ հարցեր հաճախ են ծագում բոլոր տեսակի ֆորումներում:

Ես արդեն տեղադրել եմ սա նույնպես, բայց ես կցանկանայի վերադառնալ XML ֆայլի արագ վերլուծության և տվյալների արդյունահանման իրական դեպքին, որը ես արեցի այսօր աշխատանքի ընթացքում: Ինձանից պահանջվեց ոչ ավելի, քան 5 րոպե՝ անհրաժեշտ տվյալները ստանալու համար։

Նախապատմություն. Այսօր անհրաժեշտ էր մշակել տվյալներ տեղադրված ծրագրերօգտատերերի համակարգիչների վրա (այո, այո, մենք հայտնաբերում ենք ծովահեններին :)): Տեխնիկական բաժինն ինձ տրամադրեց նման տեղեկատվություն, որը պատռված էր անկասկած օգտատերերից WMI-ի միջոցով ցանցի միջոցով: Ծրագիրը, որը նրանք օգտագործում էին, ստեղծում է հաշվետվություններ XML ձևաչափ. Համապատասխանաբար, նրանք ինձ բերեցին բավականին բարդ կառուցվածքով XML ֆայլերի մի լեռ, որտեղից ես պետք է հանեի միայն տեղադրված ծրագրային արտադրանքի անունը։

Բուժում . Մի քանի ֆայլ ձեռքով վերանայելուց հետո հասկացա, որ երկար ժամանակ չի պահանջվի ծերանալու համար, և որոշեցի մի փոքր փոխարկիչ գրել։ Գործարկելով Delphi-ն՝ ես ընտրեցի XML DataBinding օբյեկտը պահոցում և կերակրեցի նրան ֆայլերից մեկը: Ես լռելյայն թողեցի բոլոր կարգավորումներն ու պարամետրերը, և արդյունքում մոդուլ ձևավորեցի մեծ քանակությամբդասեր և միջերեսներ այս XML ֆայլի տարրերին մուտք գործելու համար: Ես երկար ժամանակ չէի սկսել զբաղվել դասարանի կառուցվածքով, անմիջապես անցա փոխարկիչ գրելուն։

Վահանակի նոր հավելվածում ես բավականին պարզ կոդ գրեցի.


XML2TXT ծրագիր;

օգտագործում է
ձևեր,
Դասեր, SysUtils,
SoftwareXML «SoftwareXML.pas»-ում;

ընթացակարգ CovertXML2Text;
var
softbase՝ IXMLSTDSoftwareType;
i: ամբողջ թիվ;
sr: TSearchRec;
CurDir:string;
ExportFile՝ TStringList;
սկսել
CurDir:= IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName));
եթե FindFirst(CurDir+"*.xml", faAnyFile, sr) = 0, ապա
կրկնել
ExportFile:= TStringList.Create;
softbase:= LoadSTDSoftware(Pchar(CurDir+sr.Name));
i:= 0-ի համար softbase.InstalledSoftware.source.software.Count - 1 անել
ExportFile.Add(softbase.InstalledSoftware.source.software[i].DisplayName);
ExportFile.Sort;
ExportFile.SaveToFile(CurDir + softbase.InstalledSoftware.Source.servername+".txt");
ExportFile.Free;
մինչև FindNext(sr) 0;
վերջ;

սկսել
Application.Initialize;
CovertXML2Text;
վերջ.

Արդյունքում ես ցանցի յուրաքանչյուր համակարգչի համար ստացա մեկ դասագիրք՝ տեղադրված ծրագրային ապահովման ցանկով։

Ես զգում եմ, որ այս օրենսգիրքը բացատրություններ կպահանջի։ Օրինակ, ինչու՞ ես օգտագործեցի Forms մոդուլը վահանակի հավելվածում և կանչեցի Application.Initialize; ընթացակարգը:

Իրականում ամեն ինչ պարզ է. սա փոքր հաքեր է, որը թույլ է տալիս օգտագործել XML Data Binding-ը կոնսոլային հավելվածում: Քանի որ այն համառորեն հրաժարվում էր դասի սկզբնավորել XML-ով աշխատելու համար: Ես դեռ չեմ պարզել իրական պատճառները. այսօր ժամանակը կարևոր էր, և ես 5 րոպեից 4-ը ծախսեցի այս սխալի դեմ պայքարելու համար: :) Կարծում եմ՝ հետո զբաղվեմ այս խնդրի հետ ու գրեմ, թե որն է իրական պատճառը։

Տարօրինակ softbase դասը ստեղծվել է XML ֆայլի հիման վրա. դա արմատային տարրի անունն էր, իսկ softbase.InstalledSoftware.source.software[i].DisplayName՝ պարզապես նավարկելով տեղադրված տարրերի միջով դեպի ցանկալիը և ստանալով դրա արժեքը:

Ահա թե ինչ տեսք ունի ամենաշատերից մեկը. արագ ուղիներաշխատել XML-ի հետ Դելֆիում:

XML-ն ավելի ու ավելի է օգտագործվում տեղեկատվության պահպանման և հավելվածների և վեբ կայքերի միջև փոխանակելու համար: Շատ հավելվածներում այս լեզուն օգտագործվում է որպես տվյալների պահպանման հիմնական լեզու, մյուսներում՝ XML տվյալների արտահանման և ներմուծման համար: Սրանից հետևում է, որ ժամանակն է, որ մշակողները մտածեն, թե XML տվյալները ինչպես կարող են օգտագործվել իրենց սեփական հավելվածներում։

Այս հոդվածում մենք կանդրադառնանք XML փաստաթղթի օբյեկտի մոդելին (DOM) և Microsoft-ի կողմից դրա ներդրմանը, Microsoft XML DOM-ին:

XML DOM-ը օբյեկտի մոդել է, որը մշակողին տրամադրում է XML ֆայլեր բեռնելու և շահարկելու համար նախատեսված օբյեկտներ: Օբյեկտի մոդելը բաղկացած է հետևյալ հիմնական օբյեկտներից. Այս օբյեկտներից յուրաքանչյուրը (բացառությամբ XMLDOMParseError-ի) պարունակում է հատկություններ և մեթոդներ, որոնք թույլ են տալիս տեղեկատվություն ստանալ օբյեկտի մասին, շահարկել օբյեկտի արժեքներն ու կառուցվածքը և նավարկել XML փաստաթղթի կառուցվածքը:

Դիտարկենք XML DOM-ի հիմնական օբյեկտները և բերենք Borland Delphi-ում դրանց օգտագործման որոշ օրինակներ:

Օգտագործելով XML DOM-ը Borland Delphi-ում

Microsoft XML DOM-ը Delphi հավելվածներում օգտագործելու համար ձեր նախագծում պետք է ներառեք համապատասխան տեսակի գրադարան: Դա անելու համար մենք կատարում ենք Project | հրամանը Ներմուծեք տիպի գրադարան և «Ներմուծման տիպի գրադարան» երկխոսության դաշտում ընտրեք Microsoft XML տարբերակ 2.0 (տարբերակ 2.0) գրադարանը, որը սովորաբար գտնվում է Windows\System\MSXML.DLL ֆայլում:

Create Unit կոճակը սեղմելուց հետո կստեղծվի MSXML_TLB ինտերֆեյսի մոդուլը, որը թույլ կտա մեզ օգտագործել XML DOM օբյեկտները՝ DOMDocument, XMLDocument, XMLHTTPRequest և մի շարք այլ, որոնք ներդրված են MSXML.DLL գրադարանում: MSXML_TLB մոդուլի հղումը պետք է նշվի Օգտագործումների ցանկում:

XML DOM սարք

Փաստաթղթի օբյեկտի մոդելը ներկայացնում է XML փաստաթուղթը որպես ծառի կառուցվածք, որը բաղկացած է ճյուղերից: XML DOM API-ները թույլ են տալիս հավելվածներին անցնել փաստաթղթերի ծառի վրայով և շահարկել դրա ճյուղերը: Յուրաքանչյուր ճյուղ կարող է ունենալ որոշակի տեսակ (DOMNodeType), ըստ որի սահմանվում են ծնող և երեխա ճյուղերը։ XML փաստաթղթերի մեծ մասում դուք կգտնեք տարրի, հատկանիշի և տեքստի ճյուղեր: Հատկանիշները ճյուղերի հատուկ տեսակ են և մանկական ճյուղեր չեն: Հատկանիշները կառավարվում են: հատուկ մեթոդներ, տրամադրված XML DOM օբյեկտների կողմից:

Ի լրումն Համաշխարհային ցանցի կոնսորցիումի (W3C) առաջարկվող միջերեսների ներդրմանը, Microsoft XML DOM-ը պարունակում է մեթոդներ, որոնք աջակցում են XSL, XSL նախշեր, անունների տարածքներ և տվյալների տեսակներ: Օրինակ, SelectNodes մեթոդը թույլ է տալիս օգտագործել XSL Pattern Syntax՝ ճյուղեր գտնելու կոնկրետ համատեքստում, իսկ TransformNode մեթոդն աջակցում է XSL-ի օգտագործումը՝ փոխակերպումներ կատարելու համար:

Test XML փաստաթուղթ

Որպես XML փաստաթղթի օրինակ՝ վերցնենք երաժշտական ​​CD-ROM գրացուցակը, որն ունի հետևյալ կառուցվածքը.

Empire Burlesque Բոբ Դիլան ԱՄՆ Կոլումբիա 10.90 1985 թաքցրու սիրտդ Բոնի Թայլոր Մեծ Բրիտանիա CBS Records 9.90 1988 ... Անջատի՛ր իմ սիրտը Ջո Կոկեր ԱՄՆ ԷՄԻ 8.20 1987

Այժմ մենք պատրաստ ենք սկսել դիտարկել XML DOM օբյեկտի մոդելը, որը մենք կսկսենք XMLDOMDdocument օբյեկտից:

XML փաստաթուղթ - XMLDOMDփաստաթղթի օբյեկտ

XML փաստաթղթի հետ աշխատանքը սկսվում է այն բեռնելուց: Դա անելու համար մենք օգտագործում ենք Load մեթոդը, որն ունի միայն մեկ պարամետր, որը սահմանում է բեռնվող փաստաթղթի URL-ը։ Տեղական սկավառակից ֆայլեր բեռնելիս նշվում է միայն ֆայլի ամբողջական անունը (այս դեպքում կարող է բաց թողնել file:/// արձանագրությունը): Եթե ​​XML փաստաթուղթը պահվում է որպես տող, դուք պետք է օգտագործեք LoadXML մեթոդը փաստաթուղթը բեռնելու համար:

Փաստաթղթի բեռնման եղանակը վերահսկելու համար (սինխրոն կամ ասինխրոն), օգտագործեք Async հատկությունը: Լռելյայնորեն, այս հատկությունը սահմանված է True՝ ցույց տալու համար, որ փաստաթուղթը բեռնվում է ասինխրոն, և հսկողությունը վերադարձվում է հավելվածին՝ նախքան փաստաթղթի լրիվ բեռնումը: Հակառակ դեպքում, փաստաթուղթը բեռնվում է համաժամանակյա, այնուհետև դուք պետք է ստուգեք ReadyState հատկության արժեքը՝ տեսնելու համար՝ փաստաթուղթը բեռնվել է, թե ոչ: Դուք կարող եք նաև ստեղծել իրադարձությունների մշակիչ OnReadyStateChange իրադարձության համար, որը կստանա վերահսկողություն, երբ փոխվի ReadyState հատկության արժեքը:

Հետևյալը ցույց է տալիս, թե ինչպես կարելի է բեռնել XML փաստաթուղթ՝ օգտագործելով Load մեթոդը.

Օգտագործում է ... MSXML_TLB ... ընթացակարգը TForm1.Button1Click(Sender: TObject); var XMLDoc՝ IXMLDOMDփաստաթղթ; սկսել XMLDoc:= CoDOMDocument.Create; XMLDoc.Async:= Սխալ; XMLDoc.Load ('C:\DATA\DATA.xml'); // // Ահա կոդը, որը շահարկում է // XML փաստաթուղթը և նրա ճյուղերը // XMLDoc:= Nil; վերջ;

Փաստաթուղթը բեռնվելուց հետո մենք կարող ենք մուտք գործել դրա հատկությունները: Օրինակ՝ NodeName հատկությունը կպարունակի #document արժեքը, NodeTypeString հատկությունը արժեքային փաստաթուղթը, իսկ URL հատկությունը՝ արժեքային ֆայլը:///C:/DATA/DATA.xml:

Սխալների մշակում

Առանձնահատուկ հետաքրքրություն են ներկայացնում այն ​​հատկությունները, որոնք կապված են փաստաթղթի մշակման հետ, երբ այն բեռնվում է: Օրինակ, ParseError հատկությունը վերադարձնում է XMLDOMParseError օբյեկտ, որը պարունակում է տեղեկատվություն փաստաթղթի մշակման ժամանակ տեղի ունեցած սխալի մասին:

Սխալների մշակիչ գրելու համար կարող եք ավելացնել հետևյալ կոդը.

Var XMLE սխալ՝ IXMLDOMParseError; ... XMLDoc.Load('C:\DATA\DATA.xml'); XMLError:= XMLDoc.ParseError; Եթե ​​XMLError.ErrorCode<>0 Այնուհետև // // Այստեղ մենք լուծում ենք սխալը // Else Memo1.Lines.Add(XMLDoc.XML); ... XMLDoc:= Զուր;

Պարզելու համար, թե ինչ տեղեկատվություն է վերադարձվում սխալի դեպքում, փոխեք հետևյալ գրացուցակի մուտքը.

Empire Burlesque Բոբ Դիլան ԱՄՆ Կոլումբիա 10.90 1985

հեռացնել փակման տարրը երկրորդ տողում.</p><p> <CD> <TITLE>Empire Burlesque <ARTIST>Բոբ Դիլան</ARTIST> <COUNTRY>ԱՄՆ</COUNTRY> <COMPANY>Կոլումբիա</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> </p><p>Այժմ եկեք գրենք կոդը, որը վերադարձնում է XMLDOMParseError օբյեկտի սեփականության արժեքները.</p><p>XMLError:= XMLDoc.ParseError; Եթե ​​XMLError.ErrorCode<>0 Այնուհետև XMLError-ով Memo1.Lines-ը սկսում է Ավելացնել ('File:' + URL); Ավելացնել ('Code:' + IntToStr (ErrorCode)); Ավելացնել ('Սխալ:' + Պատճառ); Ավելացնել ('Text:' + SrcText); Ավելացնել ('Գիծ: ' + IntToStr(Գիծ)); Add('Position:' + IntToStr(LinePos)); վերջ Else Memo1.Lines.Add(XMLDoc.XML); վերջ;</p><p>և գործարկել մեր հավելվածը: Արդյունքում մենք ստանում ենք հետևյալ սխալի մասին տեղեկատվությունը.</p> <p>Ինչպես տեսնում եք վերը նշված օրինակից, XMLDOMParseError օբյեկտի կողմից վերադարձված տեղեկատվությունը բավական է սխալը գտնելու և դրա առաջացման պատճառը հասկանալու համար:</p> <p>Հիմա եկեք վերականգնենք փակման տարրը <TITLE>մեր փաստաթղթում և շարունակենք XML DOM-ի մեր քննարկումը:</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Փաստաթղթերի ծառի մուտք</h2> <p>Փաստաթղթերի ծառին մուտք գործելու համար կարող եք կա՛մ ստանալ արմատային տարրը, այնուհետև կրկնել նրա մանկական ճյուղերը, կա՛մ գտնել որոշակի ճյուղ: Առաջին դեպքում մենք ստանում ենք արմատային տարրը DocumentElement հատկության միջոցով, որը վերադարձնում է XMLDOMNode տիպի օբյեկտ։ Հետևյալը ցույց է տալիս, թե ինչպես օգտագործել DocumentElement հատկությունը՝ յուրաքանչյուր երեխայի տարրի բովանդակությունը ստանալու համար.</p><p>VarNode՝ IXMLDOMNode; Արմատը՝ IXMLDOMElement; I: Ամբողջական թիվ; ... Արմատ:= XMLDoc.DocumentElement; For I:= 0 դեպի Root.ChildNodes.Length-1 do Begin Node:= Root.ChildNodes.Item[I]; Memo1.Lines.Add(Node.Text); վերջ;</p><p>Մեր XML փաստաթղթի համար մենք կստանանք հետևյալ տեքստը.</p> <p>Եթե ​​մեզ հետաքրքրում է կոնկրետ ճյուղ, կամ առաջին զավակի ճյուղից ցածր գտնվող ճյուղը, մենք կարող ենք օգտագործել կամ NodeFromID մեթոդը կամ XMLDOMDocument օբյեկտի GetElementByTagName մեթոդը:</p> <p>NodeFromID մեթոդը պահանջում է եզակի նույնացուցիչ, որը նշված է XML Schema-ում կամ Document Type Definition-ում (DTD) և վերադարձնում է ճյուղն այդ նույնացուցիչով:</p> <p>GetElementByTagName մեթոդը պահանջում է որոշակի տարրով տող (պիտակ) և վերադարձնում է այս տարրով բոլոր ճյուղերը: Հետևյալը ցույց է տալիս, թե ինչպես օգտագործել այս մեթոդը մեր CD-ROM գրացուցակի բոլոր նկարիչներին գտնելու համար.</p><p>Հանգույցներ՝ IXMLDOMNodeList; Հանգույց՝ IXMLDOMNode; ... Հանգույցներ:= XMLDoc.GetElementsByTagName('ARTIST'); For I:= 0 to Nodes.Length-1 do Begin Node:= Nodes.Item[I]; Memo1.Lines.Add(Node.Text); վերջ;</p><p>Մեր XML փաստաթղթի համար մենք կստանանք հետևյալ տեքստը</p> <p>Նկատի ունեցեք, որ XMLDOMNode օբյեկտի SelectNodes մեթոդն ապահովում է փաստաթղթերի ճյուղեր մուտք գործելու ավելի ճկուն միջոց: Բայց դրա մասին ավելին ստորև:</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Փաստաթղթի ճյուղ - XMLDOMNode օբյեկտ</h2> <p>XMLDOMNode օբյեկտը ներկայացնում է փաստաթղթի ճյուղ: Մենք արդեն հանդիպել ենք այս օբյեկտին, երբ ստացանք փաստաթղթի արմատային տարրը.</p><p>Արմատ:= XMLDoc.DocumentElement;</p><p>XML փաստաթղթի ճյուղի մասին տեղեկատվություն ստանալու համար կարող եք օգտագործել XMLDOMNode օբյեկտի հատկությունները (Աղյուսակ 1):</p> <p>Մասնաճյուղում պահվող տվյալներ մուտք գործելու համար սովորաբար օգտագործվում է NodeValue հատկությունը (հասանելի է ատրիբուտների, տեքստային ճյուղերի, մեկնաբանությունների, մշակման հրահանգների և CDATA բաժինների համար), Text հատկությունը, որը վերադարձնում է մասնաճյուղի տեքստային բովանդակությունը, կամ NodeTypedValue հատկությունը։ . Վերջինս, սակայն, կարող է օգտագործվել միայն մուտքագրված տարրերով ճյուղերի համար։</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>Նավարկում փաստաթղթի ծառի վրա</h3> <p>XMLDOMNode օբյեկտը տրամադրում է փաստաթղթերի ծառի վրա նավարկելու բազմաթիվ եղանակներ: Օրինակ, ծնող մասնաճյուղը հասանելի է ParentNode հատկության միջոցով (XMLDOMNode տեսակ), մանկական ճյուղերը մուտք են գործում ChildNodes (XMLDOMNodeList տիպ), FirstChild և LastChild (XMLDOMNode տեսակի) հատկություններով և այլն: OwnerDocument հատկությունը վերադարձնում է XMLDOMDocument տիպի օբյեկտ, որը նույնականացնում է հենց XML փաստաթուղթը: Վերը թվարկված հատկությունները հեշտացնում են փաստաթղթերի ծառի նավարկությունը:</p> <p>Այժմ եկեք կրկնենք XML փաստաթղթի բոլոր ճյուղերը.</p><p>Արմատ:= XMLDoc.DocumentElement; For I:= 0 դեպի Root.ChildNodes.Length-1 do Begin Node:= Root.ChildNodes.Item[I]; Եթե ​​Node.HasChildNodes Ապա GetChilds(Node,0); վերջ;</p><p>Ինչպես նշվեց վերևում, XMLDOMNode օբյեկտի SelectNodes-ն ապահովում է փաստաթղթերի ճյուղեր մուտք գործելու ավելի ճկուն միջոց: Բացի այդ, կա SelectSingleNode մեթոդ, որը վերադարձնում է փաստաթղթի միայն առաջին ճյուղը: Այս երկու մեթոդները թույլ են տալիս ճյուղեր գտնելու XSL ձևանմուշներ նշել:</p> <p>Դիտարկենք SelectNodes մեթոդի կիրառման գործընթացը բոլոր ճյուղերը, որոնք ունեն CD մասնաճյուղ և PRICE ենթաճյուղ:</p><p>Արմատ:= XMLDoc.DocumentElement; Հանգույցներ:= Root.SelectNodes ('CD/PRICE');</p><p>CD մասնաճյուղի PRICE բոլոր ենթաճյուղերը կտեղադրվեն Nodes հավաքածուում: XSL կաղապարների քննարկմանը կանդրադառնանք մի փոքր ուշ։</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>Մանկական ճյուղերի մանիպուլյացիա</h3> <p>Երեխաների ճյուղերը շահարկելու համար մենք կարող ենք օգտագործել XMLDOMNode օբյեկտի մեթոդները (Աղյուսակ 2):</p> <p>Առաջին սկավառակի մասին գրառումն ամբողջությամբ հեռացնելու համար պետք է գործարկեք հետևյալ կոդը.</p><p>Var XMLDoc՝ IXMLDOMDփաստաթղթ; Արմատը՝ IXMLDOMNode; Հանգույց՝ IXMLDOMNode; XMLDoc:= CoDOMDocument.Create; XMLDoc.Async:= Սխալ; XMLDoc.Load ('C:\DATA\DATA.xml'); // Ստացեք արմատային տարրը Root:= XMLDoc.DocumentElement; Հանգույց:= Արմատ; // Հեռացնել առաջին երեխայի մասնաճյուղը Node.RemoveChild(Node.FirstChild);</p><p>Նկատի ունեցեք, որ այս օրինակում մենք ջնջում ենք առաջին երեխայի մասնաճյուղը: Ինչպես հեռացնել առաջին երեխայի ճյուղի առաջին տարրը, ներկայացված է ստորև.</p><p>Var XMLDoc՝ IXMLDOMDփաստաթղթ; Արմատը՝ IXMLDOMNode; Հանգույց՝ IXMLDOMNode; XMLDoc:= CoDOMDocument.Create; XMLDoc.Async:= Սխալ; XMLDoc.Load ('C:\DATA\DATA.xml'); // Ստացեք արմատային տարրը Root:= XMLDoc.DocumentElement; // և առաջին երեխայի մասնաճյուղը Node:= Root.FirstChild; // Հեռացնել առաջին երեխայի մասնաճյուղը Node.RemoveChild(Node.FirstChild);</p><p>Վերոնշյալ օրինակում մենք չենք ջնջել առաջին ճյուղը <CD>…</CD>, իսկ ճյուղի առաջին տարրն է <TITLE>….

Այժմ ավելացնենք նոր մասնաճյուղ։ Ստորև բերված է ծածկագիրը, որը ցույց է տալիս, թե ինչպես ավելացնել նոր երաժշտական ​​CD-ROM մուտքագրում.

Var NewNode՝ IXMLDOMNode; Երեխան՝ IXMLDOMNode; ... // Ստեղծել նոր մասնաճյուղ - NewNode:= XMLDoc.CreateNode(1, 'CD', ''); // Ավելացնել տարր Երեխան:= XMLDoc.CreateNode(1,'TITLE',''); // Ավելացնել տարր NewNode.AppendChild(Child); // Եվ սահմանեք դրա արժեքը Child.Text:= 'Pink Floyd'; // Ավելացնել տարր <ARTIST>Երեխան:= XMLDoc.CreateNode(1, 'ARTIST', ''); // Ավելացնել տարր NewNode.AppendChild(Child); // Եվ սահմանեք դրա արժեքը Child.Text:= 'Division Bell'; // Ավելացնել տարր <COUNTRY>Երեխան:= XMLDoc.CreateNode(1, 'COUNTRY', ''); // Ավելացնել տարր NewNode.AppendChild(Child); // Եվ սահմանեք դրա արժեքը Child.Text:= 'UK'; // Ավելացնել տարր <COMPANY>Երեխան:= XMLDoc.CreateNode(1, 'COMPANY', ''); // Ավելացնել տարր NewNode.AppendChild(Child); // Եվ սահմանեք դրա արժեքը Child.Text:= 'EMI Records Ltd.'; // Ավելացնել տարր <PRICE>Երեխան:= XMLDoc.CreateNode(1, 'PRICE', ''); // Ավելացնել տարր NewNode.AppendChild(Child); // Եվ սահմանեք դրա արժեքը Child:Text:= '11.99"; // Ավելացնել տարր <YEAR>Երեխան:= XMLDoc.CreateNode(1, 'YEAR', ''); // Ավելացնել տարր NewNode.AppendChild(Child); // Եվ սահմանեք դրա արժեքը Child.Text:= '1994'; // Եվ ավելացրեք մասնաճյուղ Root.AppendChild(NewNode); ...</p><p>Վերոնշյալ կոդը ցույց է տալիս նոր մասնաճյուղ ավելացնելու քայլերի հետևյալ հաջորդականությունը.</p> <ul><li>Ստեղծելով նոր մասնաճյուղ CreateNode մեթոդով. <ul><li>ստեղծելով տարր CreateNode մեթոդով;</li> <li>մասնաճյուղին տարր ավելացնելը AppendChild մեթոդի միջոցով;</li> <li>Տեքստ հատկության միջոցով տարրի արժեքը սահմանելը;</li> <li>... կրկնել բոլոր տարրերի համար:</li> </ul></li> <li>Փաստաթղթում նոր մասնաճյուղ ավելացնելը AppendChild մեթոդով:</li> </ul><p>Հիշեցնենք, որ AppendChild մեթոդը ծառի վերջում ճյուղ է ավելացնում: Ծառի որոշակի վայրում ճյուղ ավելացնելու համար դուք պետք է օգտագործեք InsertBefore մեթոդը:</p> <h2>Մասնաճյուղերի հավաքածու - XMLDOMNodeList օբյեկտ</h2> <p>XMLNodeList օբյեկտը պարունակում է ճյուղերի ցանկ, որը կարող է կառուցվել SelectNodes կամ GetElementsByTagName մեթոդների միջոցով կամ վերցվել ChildNodes հատկությունից:</p> <p>Մենք արդեն տեսել ենք այս օբյեկտի օգտագործումը «Փաստաթղթերի ծառի նավարկություն» բաժնում տրված օրինակում: Ներկայացնում ենք մի քանի տեսական դիտողություններ.</p> <p>Ցանկի մասնաճյուղերի թիվը կարելի է ստանալ որպես Length հատկության արժեք: Մասնաճյուղերն ունեն ինդեքսներ 0-ից մինչև Length-1, և յուրաքանչյուր առանձին ճյուղ հասանելի է Item array տարրի միջոցով՝ համապատասխան ինդեքսով:</p> <p>Շարժվելով ճյուղերի ցանկով կարող է իրականացվել նաև NextNode մեթոդը, որը վերադարձնում է ցուցակի հաջորդ ճյուղը, կամ Nil, եթե ընթացիկ ճյուղը վերջինն է: Ցանկի սկզբին վերադառնալու համար զանգահարեք «Վերականգնել» մեթոդը:</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Ստեղծեք և պահպանեք փաստաթղթեր</h2> <p>Այսպիսով, մենք տեսանք, թե ինչպես կարող եք ճյուղեր և տարրեր ավելացնել առկա XML փաստաթղթերին: Այժմ եկեք ստեղծենք XML փաստաթուղթ անմիջապես: Նախ հիշեք, որ փաստաթուղթը կարելի է բեռնել ոչ միայն URL-ից, այլև սովորական տողից։ Հետևյալը ցույց է տալիս, թե ինչպես ստեղծել արմատային տարր, որն այնուհետև կարող է օգտագործվել մնացած տարրերը դինամիկ կերպով կառուցելու համար (որը մենք արդեն անդրադարձել ենք Մանիպուլյացիայի մանկական ճյուղերում).</p><p>Var XMLDoc՝ IXMLDOMDփաստաթղթ; Արմատը՝ IXMLDOMNode; Հանգույց՝ IXMLDOMNode; S: WideString; ...S:=' <CATALOG></CATALOG>'; XMLDoc:= CoDOMDocument.Create; XMLDoc.Async:= Սխալ; XMLDoc.LoadXML(S); Արմատ:= XMLDoc.DocumentElement; Node:= XMLDoc.CreateNode(1, 'CD', ''); Root.AppendChild (Node); Memo1.Lines.Add(XMLDoc.XML); ... XMLDoc:= Զուր;</p><p>XML փաստաթուղթը կառուցելուց հետո մենք այն պահում ենք ֆայլում՝ օգտագործելով Save մեթոդը: Օրինակ:</p> <p>XMLDoc.Save ('C:\DATA\NEWCD.XML');</p> <p>Բացի ֆայլում պահելուց, Save մեթոդը թույլ է տալիս պահպանել XML փաստաթուղթը նոր XMLDOMDdocument օբյեկտում: Այս դեպքում փաստաթուղթն ամբողջությամբ մշակվում է, և արդյունքում ստուգվում է դրա կառուցվածքն ու շարահյուսությունը։ Հետևյալը ցույց է տալիս, թե ինչպես պահել փաստաթուղթը մեկ այլ օբյեկտում.</p><p>Ընթացակարգ TForm1.Button2Click(Ուղարկող՝ TObject); var XMLDoc2: IXMLDOMDփաստաթղթ; սկսել XMLDoc2:= CoDOMDocument.Create; XMLDoc.Save (XMLDoc2); Memo2.Lines.Add(XMLDoc2.XML); ... XMLDoc2:= Զուր; վերջ;</p><p>Վերջապես, Save մեթոդը նաև թույլ է տալիս պահպանել XML փաստաթուղթը այլ COM օբյեկտներում, որոնք աջակցում են IStream, IPersistStream կամ IPersistStreamInit միջերեսները:</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Օգտագործելով XSL կաղապարներ</h2> <p>XMLDOMNode օբյեկտի SelectNodes մեթոդը քննարկելիս մենք նշեցինք, որ այն ապահովում է փաստաթղթերի ճյուղեր մուտք գործելու ավելի ճկուն միջոց: Ճկունությունն այն է, որ դուք կարող եք նշել XSL կաղապարը որպես ճյուղեր ընտրելու չափանիշ: Նման ձևանմուշները հզոր մեխանիզմ են ապահովում XML փաստաթղթերում տեղեկատվություն գտնելու համար: Օրինակ, մեր կատալոգի բոլոր երաժշտական ​​CD-ROM վերնագրերի ցանկը ստանալու համար մենք կարող ենք կատարել հետևյալ հարցումը.</p><p>Պարզելու համար, թե որ արտիստների ձայնասկավառակներն են թողարկվել ԱՄՆ-ում, հարցումը ձևավորվում է հետևյալ կերպ.</p><p>Հանգույցներ:= Root.SelectNodes('CD/ARTIST');</p><p>Հետևյալը ցույց է տալիս, թե ինչպես գտնել առաջին սկավառակը գրացուցակում.</p><p>Հանգույցներ:= Root.SelectNodes('CD/TITLE');</p><p>Եվ վերջին.</p><p>Հանգույցներ:= Root.SelectNodes('CD/TITLE');</p><p>Բոբ Դիլանի սկավառակները գտնելու համար կարող եք կատարել հետևյալ հարցումը.</p><p>Հանգույցներ:= Root.SelectNodes('CD[$any$ ARTIST="Bob Dylan"]/TITLE');</p><p>և 1985 թվականից հետո թողարկված սկավառակների ցանկը ստանալու համար մենք կատարում ենք հետևյալ հարցումը.</p><p>Հանգույցներ:= Root.SelectNodes('CD/TITLE');</p><p>XSL շարահյուսության ավելի մանրամասն քննարկումը պահանջում է առանձին գրառում: Ընթերցողներին հետաքրքրելու և հետագա հետազոտությունները խրախուսելու համար ես միայն մեկ փոքր օրինակ կտամ XSL-ի հնարավոր օգտագործման մասին: Ենթադրենք, որ մենք պետք է մեր գրացուցակը վերածենք սովորական HTML աղյուսակի: Օգտագործելով ավանդական մեթոդները, մենք պետք է անցնենք ծառի բոլոր ճյուղերը և ձևավորենք համապատասխան պիտակներ ստացված յուրաքանչյուր տարրի համար: <TD>…</TD>.</p> <p>Օգտագործելով XSL, մենք պարզապես ստեղծում ենք ձևանմուշ (կամ ոճի թերթիկ), որտեղ մենք նշում ենք, թե ինչ և ինչպես փոխակերպել: Այնուհետև մենք պարտադրում ենք այս ձևանմուշը մեր կատալոգում, և դուք պատրաստ եք. մենք ունենք XSL ձևանմուշի տեքստը, որը կատալոգը վերածում է աղյուսակի (Ցուցակ 2):</p> <p>Մեր գրացուցակում XSL ձևանմուշը ծածկելու ծածկագիրը հետևյալն է.</p><p>Ընթացակարգ TForm1.Button2Click(Ուղարկող՝ TObject); var XSLDoc՝ IXMLDOMdocument; սկսել XSLDoc:= CoDOMDocument.Create; XSLDoc.Load ('C:\DATA\DATA.xsl'); Memo2.Text:= XMLDoc.TransformNode(XSLDoc); XSLDoc:= Զուր; վերջ;</p><p>Ավարտելով XSL-ի մեր քննարկումը, պետք է ասել, որ ներկայումս այս լեզուն ակտիվորեն օգտագործվում է տարբեր XML փաստաթղթերի միջև փոխակերպման, ինչպես նաև փաստաթղթերի ձևաչափման համար։</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Եզրակացություն</h2> <p>Հասկանալի պատճառներով անհնար է մեկ հոդվածում լուսաբանել Microsoft XML DOM-ի բոլոր օբյեկտները և տալ դրանց օգտագործման օրինակներ։ Այստեղ մենք միայն անդրադարձել ենք հավելվածներում XML DOM-ի օգտագործման հիմնական խնդիրներին։ Աղյուսակում. Նկար 3-ում ներկայացված են Microsoft XML DOM-ում ներդրված բոլոր օբյեկտները:</p> <p>ComputerPress 12"2000 թ</p> <p>XML-ն ավելի ու ավելի է օգտագործվում տեղեկատվության պահպանման և հավելվածների և վեբ կայքերի միջև փոխանակելու համար: Շատ հավելվածներում այս լեզուն օգտագործվում է որպես տվյալների պահպանման հիմնական լեզու, մյուսներում՝ XML տվյալների արտահանման և ներմուծման համար: Սրանից հետևում է, որ ժամանակն է, որ մշակողները մտածեն, թե XML տվյալները ինչպես կարող են օգտագործվել իրենց սեփական հավելվածներում։</p> <p>Այս հոդվածում մենք կանդրադառնանք XML փաստաթղթի օբյեկտի մոդելին (DOM) և Microsoft-ի կողմից դրա ներդրմանը, Microsoft XML DOM-ին:</p> <p>XML DOM-ը օբյեկտի մոդել է, որը մշակողին տրամադրում է XML ֆայլեր բեռնելու և շահարկելու համար նախատեսված օբյեկտներ: Օբյեկտի մոդելը բաղկացած է հետևյալ հիմնական օբյեկտներից. Այս օբյեկտներից յուրաքանչյուրը (բացառությամբ XMLDOMParseError-ի) պարունակում է հատկություններ և մեթոդներ, որոնք թույլ են տալիս տեղեկատվություն ստանալ օբյեկտի մասին, շահարկել օբյեկտի արժեքներն ու կառուցվածքը և նավարկել XML փաստաթղթի կառուցվածքը:</p> <p>Դիտարկենք XML DOM-ի հիմնական օբյեկտները և բերենք Borland Delphi-ում դրանց օգտագործման որոշ օրինակներ:</p> <h2>Օգտագործելով XML DOM-ը Borland Delphi-ում</h2> <p>Microsoft XML DOM-ը Delphi հավելվածներում օգտագործելու համար ձեր նախագծում պետք է ներառեք համապատասխան տեսակի գրադարան: Դա անելու համար մենք կատարում ենք Project | հրամանը Ներմուծեք տիպի գրադարան և «Ներմուծման տիպի գրադարան» երկխոսության դաշտում ընտրեք Microsoft XML տարբերակ 2.0 (տարբերակ 2.0) գրադարանը, որը սովորաբար գտնվում է Windows\System\MSXML.DLL ֆայլում:</p> <p>Create Unit կոճակը սեղմելուց հետո կստեղծվի MSXML_TLB ինտերֆեյսի մոդուլը, որը թույլ կտա մեզ օգտագործել XML DOM օբյեկտները՝ DOMDocument, XMLDocument, XMLHTTPRequest և մի շարք այլ, որոնք ներդրված են MSXML.DLL գրադարանում: MSXML_TLB մոդուլի հղումը պետք է նշվի Օգտագործումների ցանկում:</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>XML DOM սարք</h2> <p>Փաստաթղթի օբյեկտի մոդելը ներկայացնում է XML փաստաթուղթը որպես ծառի կառուցվածք, որը բաղկացած է ճյուղերից: XML DOM API-ները թույլ են տալիս հավելվածներին անցնել փաստաթղթերի ծառի վրայով և շահարկել դրա ճյուղերը: Յուրաքանչյուր ճյուղ կարող է ունենալ որոշակի տեսակ (DOMNodeType), ըստ որի սահմանվում են ծնող և երեխա ճյուղերը։ XML փաստաթղթերի մեծ մասում դուք կգտնեք տարրի, հատկանիշի և տեքստի ճյուղեր: Հատկանիշները ճյուղերի հատուկ տեսակ են և մանկական ճյուղեր չեն: Հատկանիշները շահարկվում են XML DOM օբյեկտների կողմից տրամադրված հատուկ մեթոդների միջոցով:</p> <p>Ի լրումն Համաշխարհային ցանցի կոնսորցիումի (W3C) առաջարկվող միջերեսների ներդրմանը, Microsoft XML DOM-ը պարունակում է մեթոդներ, որոնք աջակցում են XSL, XSL նախշեր, անունների տարածքներ և տվյալների տեսակներ: Օրինակ, SelectNodes մեթոդը թույլ է տալիս օգտագործել XSL Pattern Syntax՝ ճյուղեր գտնելու կոնկրետ համատեքստում, իսկ TransformNode մեթոդն աջակցում է XSL-ի օգտագործումը՝ փոխակերպումներ կատարելու համար:</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Test XML փաստաթուղթ</h2> <p>Որպես XML փաստաթղթի օրինակ՝ վերցնենք երաժշտական ​​CD-ROM գրացուցակը, որն ունի հետևյալ կառուցվածքը.</p><p> <?xml version=”1.0"?> <CATALOG> <CD> <TITLE>Empire Burlesque Բոբ Դիլան ԱՄՆ Կոլումբիա 10.90 1985 թաքցրու սիրտդ Բոնի Թայլոր Մեծ Բրիտանիա CBS Records 9.90 1988 ... Անջատի՛ր իմ սիրտը Ջո Կոկեր ԱՄՆ ԷՄԻ 8.20 1987

Այժմ մենք պատրաստ ենք սկսել դիտարկել XML DOM օբյեկտի մոդելը, որը մենք կսկսենք XMLDOMDdocument օբյեկտից:

XML փաստաթուղթ - XMLDOMDփաստաթղթի օբյեկտ

XML փաստաթղթի հետ աշխատանքը սկսվում է այն բեռնելուց: Դա անելու համար մենք օգտագործում ենք Load մեթոդը, որն ունի միայն մեկ պարամետր, որը սահմանում է բեռնվող փաստաթղթի URL-ը։ Տեղական սկավառակից ֆայլեր բեռնելիս նշվում է միայն ֆայլի ամբողջական անունը (այս դեպքում կարող է բաց թողնել file:/// արձանագրությունը): Եթե ​​XML փաստաթուղթը պահվում է որպես տող, դուք պետք է օգտագործեք LoadXML մեթոդը փաստաթուղթը բեռնելու համար:

Փաստաթղթի բեռնման եղանակը վերահսկելու համար (սինխրոն կամ ասինխրոն), օգտագործեք Async հատկությունը: Լռելյայնորեն, այս հատկությունը սահմանված է True՝ ցույց տալու համար, որ փաստաթուղթը բեռնվում է ասինխրոն, և հսկողությունը վերադարձվում է հավելվածին՝ նախքան փաստաթղթի լրիվ բեռնումը: Հակառակ դեպքում, փաստաթուղթը բեռնվում է համաժամանակյա, այնուհետև դուք պետք է ստուգեք ReadyState հատկության արժեքը՝ տեսնելու համար՝ փաստաթուղթը բեռնվել է, թե ոչ: Դուք կարող եք նաև ստեղծել իրադարձությունների մշակիչ OnReadyStateChange իրադարձության համար, որը կստանա վերահսկողություն, երբ փոխվի ReadyState հատկության արժեքը:

Հետևյալը ցույց է տալիս, թե ինչպես կարելի է բեռնել XML փաստաթուղթ՝ օգտագործելով Load մեթոդը.

Օգտագործում է ... MSXML_TLB ... ընթացակարգը TForm1.Button1Click(Sender: TObject); var XMLDoc՝ IXMLDOMDփաստաթղթ; սկսել XMLDoc:= CoDOMDocument.Create; XMLDoc.Async:= Սխալ; XMLDoc.Load ('C:\DATA\DATA.xml'); // // Ահա կոդը, որը շահարկում է // XML փաստաթուղթը և նրա ճյուղերը // XMLDoc:= Nil; վերջ;

Փաստաթուղթը բեռնվելուց հետո մենք կարող ենք մուտք գործել դրա հատկությունները: Օրինակ՝ NodeName հատկությունը կպարունակի #document արժեքը, NodeTypeString հատկությունը արժեքային փաստաթուղթը, իսկ URL հատկությունը՝ արժեքային ֆայլը:///C:/DATA/DATA.xml:

Սխալների մշակում

Առանձնահատուկ հետաքրքրություն են ներկայացնում այն ​​հատկությունները, որոնք կապված են փաստաթղթի մշակման հետ, երբ այն բեռնվում է: Օրինակ, ParseError հատկությունը վերադարձնում է XMLDOMParseError օբյեկտ, որը պարունակում է տեղեկատվություն փաստաթղթի մշակման ժամանակ տեղի ունեցած սխալի մասին:

Սխալների մշակիչ գրելու համար կարող եք ավելացնել հետևյալ կոդը.

Var XMLE սխալ՝ IXMLDOMParseError; ... XMLDoc.Load('C:\DATA\DATA.xml'); XMLError:= XMLDoc.ParseError; Եթե ​​XMLError.ErrorCode<>0 Այնուհետև // // Այստեղ մենք լուծում ենք սխալը // Else Memo1.Lines.Add(XMLDoc.XML); ... XMLDoc:= Զուր;

Պարզելու համար, թե ինչ տեղեկատվություն է վերադարձվում սխալի դեպքում, փոխեք հետևյալ գրացուցակի մուտքը.

Empire Burlesque Բոբ Դիլան ԱՄՆ Կոլումբիա 10.90 1985

հեռացնել փակման տարրը երկրորդ տողում.</p><p> <CD> <TITLE>Empire Burlesque <ARTIST>Բոբ Դիլան</ARTIST> <COUNTRY>ԱՄՆ</COUNTRY> <COMPANY>Կոլումբիա</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> </p><p>Այժմ եկեք գրենք կոդը, որը վերադարձնում է XMLDOMParseError օբյեկտի սեփականության արժեքները.</p><p>XMLError:= XMLDoc.ParseError; Եթե ​​XMLError.ErrorCode<>0 Այնուհետև XMLError-ով Memo1.Lines-ը սկսում է Ավելացնել ('File:' + URL); Ավելացնել ('Code:' + IntToStr (ErrorCode)); Ավելացնել ('Սխալ:' + Պատճառ); Ավելացնել ('Text:' + SrcText); Ավելացնել ('Գիծ: ' + IntToStr(Գիծ)); Add('Position:' + IntToStr(LinePos)); վերջ Else Memo1.Lines.Add(XMLDoc.XML); վերջ;</p><p>և գործարկել մեր հավելվածը: Արդյունքում մենք ստանում ենք հետևյալ սխալի մասին տեղեկատվությունը.</p> <p>Ինչպես տեսնում եք վերը նշված օրինակից, XMLDOMParseError օբյեկտի կողմից վերադարձված տեղեկատվությունը բավական է սխալը գտնելու և դրա առաջացման պատճառը հասկանալու համար:</p> <p>Հիմա եկեք վերականգնենք փակման տարրը <TITLE>մեր փաստաթղթում և շարունակենք XML DOM-ի մեր քննարկումը:</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Փաստաթղթերի ծառի մուտք</h2> <p>Փաստաթղթերի ծառին մուտք գործելու համար կարող եք կա՛մ ստանալ արմատային տարրը, այնուհետև կրկնել նրա մանկական ճյուղերը, կա՛մ գտնել որոշակի ճյուղ: Առաջին դեպքում մենք ստանում ենք արմատային տարրը DocumentElement հատկության միջոցով, որը վերադարձնում է XMLDOMNode տիպի օբյեկտ։ Հետևյալը ցույց է տալիս, թե ինչպես օգտագործել DocumentElement հատկությունը՝ յուրաքանչյուր երեխայի տարրի բովանդակությունը ստանալու համար.</p><p>VarNode՝ IXMLDOMNode; Արմատը՝ IXMLDOMElement; I: Ամբողջական թիվ; ... Արմատ:= XMLDoc.DocumentElement; For I:= 0 դեպի Root.ChildNodes.Length-1 do Begin Node:= Root.ChildNodes.Item[I]; Memo1.Lines.Add(Node.Text); վերջ;</p><p>Մեր XML փաստաթղթի համար մենք կստանանք հետևյալ տեքստը.</p> <p>Եթե ​​մեզ հետաքրքրում է կոնկրետ ճյուղ, կամ առաջին զավակի ճյուղից ցածր գտնվող ճյուղը, մենք կարող ենք օգտագործել կամ NodeFromID մեթոդը կամ XMLDOMDocument օբյեկտի GetElementByTagName մեթոդը:</p> <p>NodeFromID մեթոդը պահանջում է եզակի նույնացուցիչ, որը նշված է XML Schema-ում կամ Document Type Definition-ում (DTD) և վերադարձնում է ճյուղն այդ նույնացուցիչով:</p> <p>GetElementByTagName մեթոդը պահանջում է որոշակի տարրով տող (պիտակ) և վերադարձնում է այս տարրով բոլոր ճյուղերը: Հետևյալը ցույց է տալիս, թե ինչպես օգտագործել այս մեթոդը մեր CD-ROM գրացուցակի բոլոր նկարիչներին գտնելու համար.</p><p>Հանգույցներ՝ IXMLDOMNodeList; Հանգույց՝ IXMLDOMNode; ... Հանգույցներ:= XMLDoc.GetElementsByTagName('ARTIST'); For I:= 0 to Nodes.Length-1 do Begin Node:= Nodes.Item[I]; Memo1.Lines.Add(Node.Text); վերջ;</p><p>Մեր XML փաստաթղթի համար մենք կստանանք հետևյալ տեքստը</p> <p>Նկատի ունեցեք, որ XMLDOMNode օբյեկտի SelectNodes մեթոդն ապահովում է փաստաթղթերի ճյուղեր մուտք գործելու ավելի ճկուն միջոց: Բայց դրա մասին ավելին ստորև:</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Փաստաթղթի ճյուղ - XMLDOMNode օբյեկտ</h2> <p>XMLDOMNode օբյեկտը ներկայացնում է փաստաթղթի ճյուղ: Մենք արդեն հանդիպել ենք այս օբյեկտին, երբ ստացանք փաստաթղթի արմատային տարրը.</p><p>Արմատ:= XMLDoc.DocumentElement;</p><p>XML փաստաթղթի ճյուղի մասին տեղեկատվություն ստանալու համար կարող եք օգտագործել XMLDOMNode օբյեկտի հատկությունները (Աղյուսակ 1):</p> <p>Մասնաճյուղում պահվող տվյալներ մուտք գործելու համար սովորաբար օգտագործվում է NodeValue հատկությունը (հասանելի է ատրիբուտների, տեքստային ճյուղերի, մեկնաբանությունների, մշակման հրահանգների և CDATA բաժինների համար), Text հատկությունը, որը վերադարձնում է մասնաճյուղի տեքստային բովանդակությունը, կամ NodeTypedValue հատկությունը։ . Վերջինս, սակայն, կարող է օգտագործվել միայն մուտքագրված տարրերով ճյուղերի համար։</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>Նավարկում փաստաթղթի ծառի վրա</h3> <p>XMLDOMNode օբյեկտը տրամադրում է փաստաթղթերի ծառի վրա նավարկելու բազմաթիվ եղանակներ: Օրինակ, ծնող մասնաճյուղը հասանելի է ParentNode հատկության միջոցով (XMLDOMNode տեսակ), մանկական ճյուղերը մուտք են գործում ChildNodes (XMLDOMNodeList տիպ), FirstChild և LastChild (XMLDOMNode տեսակի) հատկություններով և այլն: OwnerDocument հատկությունը վերադարձնում է XMLDOMDocument տիպի օբյեկտ, որը նույնականացնում է հենց XML փաստաթուղթը: Վերը թվարկված հատկությունները հեշտացնում են փաստաթղթերի ծառի նավարկությունը:</p> <p>Այժմ եկեք կրկնենք XML փաստաթղթի բոլոր ճյուղերը.</p><p>Արմատ:= XMLDoc.DocumentElement; For I:= 0 դեպի Root.ChildNodes.Length-1 do Begin Node:= Root.ChildNodes.Item[I]; Եթե ​​Node.HasChildNodes Ապա GetChilds(Node,0); վերջ;</p><p>Ինչպես նշվեց վերևում, XMLDOMNode օբյեկտի SelectNodes-ն ապահովում է փաստաթղթերի ճյուղեր մուտք գործելու ավելի ճկուն միջոց: Բացի այդ, կա SelectSingleNode մեթոդ, որը վերադարձնում է փաստաթղթի միայն առաջին ճյուղը: Այս երկու մեթոդները թույլ են տալիս ճյուղեր գտնելու XSL ձևանմուշներ նշել:</p> <p>Դիտարկենք SelectNodes մեթոդի կիրառման գործընթացը բոլոր ճյուղերը, որոնք ունեն CD մասնաճյուղ և PRICE ենթաճյուղ:</p><p>Արմատ:= XMLDoc.DocumentElement; Հանգույցներ:= Root.SelectNodes ('CD/PRICE');</p><p>CD մասնաճյուղի PRICE բոլոր ենթաճյուղերը կտեղադրվեն Nodes հավաքածուում: XSL կաղապարների քննարկմանը կանդրադառնանք մի փոքր ուշ։</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>Մանկական ճյուղերի մանիպուլյացիա</h3> <p>Երեխաների ճյուղերը շահարկելու համար մենք կարող ենք օգտագործել XMLDOMNode օբյեկտի մեթոդները (Աղյուսակ 2):</p> <p>Առաջին սկավառակի մասին գրառումն ամբողջությամբ հեռացնելու համար պետք է գործարկեք հետևյալ կոդը.</p><p>Var XMLDoc՝ IXMLDOMDփաստաթղթ; Արմատը՝ IXMLDOMNode; Հանգույց՝ IXMLDOMNode; XMLDoc:= CoDOMDocument.Create; XMLDoc.Async:= Սխալ; XMLDoc.Load ('C:\DATA\DATA.xml'); // Ստացեք արմատային տարրը Root:= XMLDoc.DocumentElement; Հանգույց:= Արմատ; // Հեռացնել առաջին երեխայի մասնաճյուղը Node.RemoveChild(Node.FirstChild);</p><p>Նկատի ունեցեք, որ այս օրինակում մենք ջնջում ենք առաջին երեխայի մասնաճյուղը: Ինչպես հեռացնել առաջին երեխայի ճյուղի առաջին տարրը, ներկայացված է ստորև.</p><p>Var XMLDoc՝ IXMLDOMDփաստաթղթ; Արմատը՝ IXMLDOMNode; Հանգույց՝ IXMLDOMNode; XMLDoc:= CoDOMDocument.Create; XMLDoc.Async:= Սխալ; XMLDoc.Load ('C:\DATA\DATA.xml'); // Ստացեք արմատային տարրը Root:= XMLDoc.DocumentElement; // և առաջին երեխայի մասնաճյուղը Node:= Root.FirstChild; // Հեռացնել առաջին երեխայի մասնաճյուղը Node.RemoveChild(Node.FirstChild);</p><p>Վերոնշյալ օրինակում մենք չենք ջնջել առաջին ճյուղը <CD>…</CD>, իսկ ճյուղի առաջին տարրն է <TITLE>….

Այժմ ավելացնենք նոր մասնաճյուղ։ Ստորև բերված է ծածկագիրը, որը ցույց է տալիս, թե ինչպես ավելացնել նոր երաժշտական ​​CD-ROM մուտքագրում.

Var NewNode՝ IXMLDOMNode; Երեխան՝ IXMLDOMNode; ... // Ստեղծել նոր մասնաճյուղ - NewNode:= XMLDoc.CreateNode(1, 'CD', ''); // Ավելացնել տարր Երեխան:= XMLDoc.CreateNode(1,'TITLE',''); // Ավելացնել տարր NewNode.AppendChild(Child); // Եվ սահմանեք դրա արժեքը Child.Text:= 'Pink Floyd'; // Ավելացնել տարր <ARTIST>Երեխան:= XMLDoc.CreateNode(1, 'ARTIST', ''); // Ավելացնել տարր NewNode.AppendChild(Child); // Եվ սահմանեք դրա արժեքը Child.Text:= 'Division Bell'; // Ավելացնել տարր <COUNTRY>Երեխան:= XMLDoc.CreateNode(1, 'COUNTRY', ''); // Ավելացնել տարր NewNode.AppendChild(Child); // Եվ սահմանեք դրա արժեքը Child.Text:= 'UK'; // Ավելացնել տարր <COMPANY>Երեխան:= XMLDoc.CreateNode(1, 'COMPANY', ''); // Ավելացնել տարր NewNode.AppendChild(Child); // Եվ սահմանեք դրա արժեքը Child.Text:= 'EMI Records Ltd.'; // Ավելացնել տարր <PRICE>Երեխան:= XMLDoc.CreateNode(1, 'PRICE', ''); // Ավելացնել տարր NewNode.AppendChild(Child); // Եվ սահմանեք դրա արժեքը Child:Text:= '11.99"; // Ավելացնել տարր <YEAR>Երեխան:= XMLDoc.CreateNode(1, 'YEAR', ''); // Ավելացնել տարր NewNode.AppendChild(Child); // Եվ սահմանեք դրա արժեքը Child.Text:= '1994'; // Եվ ավելացրեք մասնաճյուղ Root.AppendChild(NewNode); ...</p><p>Վերոնշյալ կոդը ցույց է տալիս նոր մասնաճյուղ ավելացնելու քայլերի հետևյալ հաջորդականությունը.</p> <ul><li>Ստեղծելով նոր մասնաճյուղ CreateNode մեթոդով. <ul><li>ստեղծելով տարր CreateNode մեթոդով;</li> <li>մասնաճյուղին տարր ավելացնելը AppendChild մեթոդի միջոցով;</li> <li>Տեքստ հատկության միջոցով տարրի արժեքը սահմանելը;</li> <li>... կրկնել բոլոր տարրերի համար:</li> </ul></li> <li>Փաստաթղթում նոր մասնաճյուղ ավելացնելը AppendChild մեթոդով:</li> </ul><p>Հիշեցնենք, որ AppendChild մեթոդը ծառի վերջում ճյուղ է ավելացնում: Ծառի որոշակի վայրում ճյուղ ավելացնելու համար դուք պետք է օգտագործեք InsertBefore մեթոդը:</p> <h2>Մասնաճյուղերի հավաքածու - XMLDOMNodeList օբյեկտ</h2> <p>XMLNodeList օբյեկտը պարունակում է ճյուղերի ցանկ, որը կարող է կառուցվել SelectNodes կամ GetElementsByTagName մեթոդների միջոցով կամ վերցվել ChildNodes հատկությունից:</p> <p>Մենք արդեն տեսել ենք այս օբյեկտի օգտագործումը «Փաստաթղթերի ծառի նավարկություն» բաժնում տրված օրինակում: Ներկայացնում ենք մի քանի տեսական դիտողություններ.</p> <p>Ցանկի մասնաճյուղերի թիվը կարելի է ստանալ որպես Length հատկության արժեք: Մասնաճյուղերն ունեն ինդեքսներ 0-ից մինչև Length-1, և յուրաքանչյուր առանձին ճյուղ հասանելի է Item array տարրի միջոցով՝ համապատասխան ինդեքսով:</p> <p>Շարժվելով ճյուղերի ցանկով կարող է իրականացվել նաև NextNode մեթոդը, որը վերադարձնում է ցուցակի հաջորդ ճյուղը, կամ Nil, եթե ընթացիկ ճյուղը վերջինն է: Ցանկի սկզբին վերադառնալու համար զանգահարեք «Վերականգնել» մեթոդը:</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Ստեղծեք և պահպանեք փաստաթղթեր</h2> <p>Այսպիսով, մենք տեսանք, թե ինչպես կարող եք ճյուղեր և տարրեր ավելացնել առկա XML փաստաթղթերին: Այժմ եկեք ստեղծենք XML փաստաթուղթ անմիջապես: Նախ հիշեք, որ փաստաթուղթը կարելի է բեռնել ոչ միայն URL-ից, այլև սովորական տողից։ Հետևյալը ցույց է տալիս, թե ինչպես ստեղծել արմատային տարր, որն այնուհետև կարող է օգտագործվել մնացած տարրերը դինամիկ կերպով կառուցելու համար (որը մենք արդեն անդրադարձել ենք Մանիպուլյացիայի մանկական ճյուղերում).</p><p>Var XMLDoc՝ IXMLDOMDփաստաթղթ; Արմատը՝ IXMLDOMNode; Հանգույց՝ IXMLDOMNode; S: WideString; ...S:=' <CATALOG></CATALOG>'; XMLDoc:= CoDOMDocument.Create; XMLDoc.Async:= Սխալ; XMLDoc.LoadXML(S); Արմատ:= XMLDoc.DocumentElement; Node:= XMLDoc.CreateNode(1, 'CD', ''); Root.AppendChild (Node); Memo1.Lines.Add(XMLDoc.XML); ... XMLDoc:= Զուր;</p><p>XML փաստաթուղթը կառուցելուց հետո մենք այն պահում ենք ֆայլում՝ օգտագործելով Save մեթոդը: Օրինակ:</p> <p>XMLDoc.Save ('C:\DATA\NEWCD.XML');</p> <p>Բացի ֆայլում պահելուց, Save մեթոդը թույլ է տալիս պահպանել XML փաստաթուղթը նոր XMLDOMDdocument օբյեկտում: Այս դեպքում փաստաթուղթն ամբողջությամբ մշակվում է, և արդյունքում ստուգվում է դրա կառուցվածքն ու շարահյուսությունը։ Հետևյալը ցույց է տալիս, թե ինչպես պահել փաստաթուղթը մեկ այլ օբյեկտում.</p><p>Ընթացակարգ TForm1.Button2Click(Ուղարկող՝ TObject); var XMLDoc2: IXMLDOMDփաստաթղթ; սկսել XMLDoc2:= CoDOMDocument.Create; XMLDoc.Save (XMLDoc2); Memo2.Lines.Add(XMLDoc2.XML); ... XMLDoc2:= Զուր; վերջ;</p><p>Վերջապես, Save մեթոդը նաև թույլ է տալիս պահպանել XML փաստաթուղթը այլ COM օբյեկտներում, որոնք աջակցում են IStream, IPersistStream կամ IPersistStreamInit միջերեսները:</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Օգտագործելով XSL կաղապարներ</h2> <p>XMLDOMNode օբյեկտի SelectNodes մեթոդը քննարկելիս մենք նշեցինք, որ այն ապահովում է փաստաթղթերի ճյուղեր մուտք գործելու ավելի ճկուն միջոց: Ճկունությունն այն է, որ դուք կարող եք նշել XSL կաղապարը որպես ճյուղեր ընտրելու չափանիշ: Նման ձևանմուշները հզոր մեխանիզմ են ապահովում XML փաստաթղթերում տեղեկատվություն գտնելու համար: Օրինակ, մեր կատալոգի բոլոր երաժշտական ​​CD-ROM վերնագրերի ցանկը ստանալու համար մենք կարող ենք կատարել հետևյալ հարցումը.</p><p>Պարզելու համար, թե որ արտիստների ձայնասկավառակներն են թողարկվել ԱՄՆ-ում, հարցումը ձևավորվում է հետևյալ կերպ.</p><p>Հանգույցներ:= Root.SelectNodes('CD/ARTIST');</p><p>Հետևյալը ցույց է տալիս, թե ինչպես գտնել առաջին սկավառակը գրացուցակում.</p><p>Հանգույցներ:= Root.SelectNodes('CD/TITLE');</p><p>Եվ վերջին.</p><p>Հանգույցներ:= Root.SelectNodes('CD/TITLE');</p><p>Բոբ Դիլանի սկավառակները գտնելու համար կարող եք կատարել հետևյալ հարցումը.</p><p>Հանգույցներ:= Root.SelectNodes('CD[$any$ ARTIST="Bob Dylan"]/TITLE');</p><p>և 1985 թվականից հետո թողարկված սկավառակների ցանկը ստանալու համար մենք կատարում ենք հետևյալ հարցումը.</p><p>Հանգույցներ:= Root.SelectNodes('CD/TITLE');</p><p>XSL շարահյուսության ավելի մանրամասն քննարկումը պահանջում է առանձին գրառում: Ընթերցողներին հետաքրքրելու և հետագա հետազոտությունները խրախուսելու համար ես միայն մեկ փոքր օրինակ կտամ XSL-ի հնարավոր օգտագործման մասին: Ենթադրենք, որ մենք պետք է մեր գրացուցակը վերածենք սովորական HTML աղյուսակի: Օգտագործելով ավանդական մեթոդները, մենք պետք է անցնենք ծառի բոլոր ճյուղերը և ձևավորենք համապատասխան պիտակներ ստացված յուրաքանչյուր տարրի համար: <TD>…</TD>.</p> <p>Օգտագործելով XSL, մենք պարզապես ստեղծում ենք ձևանմուշ (կամ ոճի թերթիկ), որտեղ մենք նշում ենք, թե ինչ և ինչպես փոխակերպել: Այնուհետև մենք պարտադրում ենք այս ձևանմուշը մեր կատալոգում, և դուք պատրաստ եք. մենք ունենք XSL ձևանմուշի տեքստը, որը կատալոգը վերածում է աղյուսակի (Ցուցակ 2):</p> <p>Մեր գրացուցակում XSL ձևանմուշը ծածկելու ծածկագիրը հետևյալն է.</p><p>Ընթացակարգ TForm1.Button2Click(Ուղարկող՝ TObject); var XSLDoc՝ IXMLDOMdocument; սկսել XSLDoc:= CoDOMDocument.Create; XSLDoc.Load ('C:\DATA\DATA.xsl'); Memo2.Text:= XMLDoc.TransformNode(XSLDoc); XSLDoc:= Զուր; վերջ;</p><p>Ավարտելով XSL-ի մեր քննարկումը, պետք է ասել, որ ներկայումս այս լեզուն ակտիվորեն օգտագործվում է տարբեր XML փաստաթղթերի միջև փոխակերպման, ինչպես նաև փաստաթղթերի ձևաչափման համար։</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Եզրակացություն</h2> <p>Հասկանալի պատճառներով անհնար է մեկ հոդվածում լուսաբանել Microsoft XML DOM-ի բոլոր օբյեկտները և տալ դրանց օգտագործման օրինակներ։ Այստեղ մենք միայն անդրադարձել ենք հավելվածներում XML DOM-ի օգտագործման հիմնական խնդիրներին։ Աղյուսակում. Նկար 3-ում ներկայացված են Microsoft XML DOM-ում ներդրված բոլոր օբյեկտները:</p> <p>ComputerPress 12"2000 թ</p> <p>Ես ողջունում եմ բոլորին! Մի քանի տարի գրել էի Matlab-ում, իսկ հետո անհամբեր էի Դելֆիում ծրագիր գրելու համար:</p><p>Ես պետք է սովորեմ, թե ինչպես աշխատել xml փաստաթղթերի հետ: Ես աշխատում եմ RAD Stiduo XE3-ում: Կա TXMLDocument բաղադրիչ, որը հավանաբար հայտնի է Delphi-ի շատ ծրագրավորողներին: Թվում է, թե նա շատ բան կարող է անել: Բայց խնդիրն այն է, որ դրա համար հստակ փաստաթղթավորում ու նկարագրություն չկա։ RAD Studio-ում օգնությունը աղբ է, քանի որ այնտեղ նորմալ տեղեկատվություն չկա; միայն չնչին օգնություն, որը սփռված է էջերում որոշ մեթոդների և ընթացակարգերի վերաբերյալ (առանց օրինակների և սովորական նկարագրության): Փորփրեց ամբողջ ինտերնետը: Ես ֆորումներում գտել եմ միայն կոնկրետ առաջադրանքներով թեմաներ, որտեղ պետք է մի ժամ էլ գուշակել, թե ինչ է անում այս կամ այն ​​տողը, կապված xml ֆայլ մուտք գործելու հետ։ <br>Ինձ նաև պետք է ուղեցույց xml-ի հետ աշխատելիս օգտագործվող հիմնական գործառույթների, ընթացակարգերի և մեթոդների վերաբերյալ: Դասագիրք, ձեռնարկ, նկարագրություն. Կամ գոնե «xml-ը Դելֆիում կեղծիքների համար»: Օրինակ:</p><p><i>Xml ֆայլ բացելու համար օգտագործեք XMLDocument1.LoadFromFile("filemane.xml") մեթոդը, որտեղ ֆայլի անունը ֆայլի անունն է: <br>IXMLNode տիպի nodelist փոփոխականն օգտագործվում է երեխայի տարրերի ցանկը պահելու համար: Այս ցանկը որոշելու համար օգտագործեք Xmldocument1.DocumentElement մեթոդը (որտեղ XMLDocument1-ը ուսումնասիրվող xml ֆայլն է): <br>«element1» մանկական տարրի բովանդակությունը հարցնելու համար օգտագործեք XMLDocument1.DocumentElement.ChildNodes[ «element1»].Text... մեթոդը: <br></i><br>և այս ոգով հետագա բոլոր կիրառական մեթոդների, ընթացակարգերի, տվյալների տեսակների մասին: <br>Որտեղ կարող եմ գտնել նման ձեռնարկներ/նկարագրություններ: Ո՞վ կարող է օգնել:</p><p>Եթե ​​ձեզ կոնկրետ առաջադրանք է պետք, ես այն նկարագրելու եմ: <br>Ես ունեմ այսպիսի xml փաստաթուղթ.</p><p> <br><ltm version="1.0" type="settings" ><br><progname>ԼՏՄ</progname></p><p><templateFiles><br> <assets>fon.png</assets><br> <assets>up.jpg</assets><br> <images><br> <pano> <tiles>pano_u.jpg</tiles><br> <tiles>pano_f.jpg</tiles><br> </pano><br> <tour><br> <tourimages>start.jpg</tourimages><br> <tourimages>tmb.jpg</tourimages><br> </tour><br> </images><br></templateFiles><br><dimensions><br> <tiles type="pc">1910</tiles><br> <tiles type="ipad">768</tiles><br> <tiles side="iphone">512</tiles><br> <tourimages name="start.jpg" edge="long">1024</tourimages><br> <tourimages name="start.jpg" edge="short">768</tourimages><br></dimensions></p><p><hotspot name="hs015_2" style="mappoint" scena="scene017" ath="68.17644363437007" /><br><hotspot name="hs015_1" style="mappoint" scena="scene014" rz="4436007" /> <br><data name="onstart" mode="noVoice">որոշ տեքստ</data><br><data name="onerror" mode="noVoice">որոշ սխալ տեքստ</data><br><data name="onerror" mode="alarm">Այլ սխալի տեքստ</data></p><p>Ծրագրի կոդում մենք ունենք.</p><p>var <br>...<br>ծնող, երեխա1՝ IXMLNode;</p><p>սկսել <br>XMLDocument1.LoadFromFile ("f:\filename.xml"); <br>XMLDocument1.Active:=true; <br>.<br>.<br>վերջ</p><p>Այն, ինչ դուք պետք է սովորեք անել. <br>(Նախապես ներողություն եմ խնդրում, եթե սխալ եմ անվանել xml փաստաթղթի բաղադրիչները) <br>1. Ստացեք արմատային տարրի անունը (մեր դեպքում՝ ltm), ինչպես նաև դրա ատրիբուտների ցանկը (տարբերակ, տեսակ) և դրանց արժեքները («1.0», «պարամետրեր»): <br>2. Ստացեք այն տարրերի թիվը, որոնք արմատի երեխաներ են: Այս դեպքում դրանք 7-ն են՝ templateFiles, dimensions, hotspot, hotspot, data, data, data: Ստացեք տարրերի (պիտակների) անվանումները (templateFiles, չափերը և այլն): Էլեմենտների քանակը ստանալուց և դրանց անունները հանելուց սովորելուց հետո ես 0-ից պտտվելու եմ մինչև 1-ը և կանեմ այն, ինչ ինձ անհրաժեշտ է: <br>3. Ստացեք անհրաժեշտ տարրի ատրիբուտների թիվը և ցանկը: Օրինակ, թեժ կետի տարրի համար: Ճիշտ պատասխանը կլինի 4 հատկանիշ: Առաջին թեժ կետի տարրի համար դրանք կլինեն անունը, ոճը, տեսարանը, ath. Երկրորդի համար՝ նույնը, միայն ath հատկանիշի փոխարեն՝ rz հատկանիշը։ <br>Նկատի ունեցեք, որ ֆայլում կա 2 hotspot տարր՝ տարբեր ատրիբուտներով: Ահա թե ինչպես աշխատել նրանց հետ (եթե կան 1-ից ավելի նույնանուն տարրեր): <br>Ես այդպես եմ ուզում. ես ստանում եմ մանկական տարրերի ցանկը rel-ում: դեպի արմատ մեկը (տե՛ս կետ 2), ես նրանց միջով մի օղակ եմ անցկացնում for-ով և գտնում եմ այն ​​թեժ կետի տարրերը, որոնց անվան պարամետրը հավասար է պահանջվողին (ասենք «hs015_2» - անպայման կլինի այդպիսի մեկ տարր): Կա՞ որևէ միջոց այս հարցը լուծելու առանց օղակի: Այսինքն, ստանալ scena հատկանիշի արժեքը hotspot տարրի համար, որն ունի name = "hs015_2"? <br>4. Կատարեք վերը նշված հանգույցների և տարրերի նկատմամբ, որոնք երեխաների երեխաներ են: Իմ օրինակում հանգույց (և-ի երեխա և ծնող: <br>Եթե ​​ես ճիշտ եմ հասկանում, պետք է ինչ-որ կերպ փոխանցել հանգույցի բովանդակությունը <a href="https://obanracer.ru/hy/tipy-peremennyh-visual-basic-yazyk-programmirovaniya-visual-basic-tipy-dannyh.html">տեսակի փոփոխական</a> IXMLNode և արեք նույնը, ինչ 1-3 պարբերություններում: Այսպիսով.</p><p>5. Դուք պետք է սովորեք, թե ինչպես փոխել վերը նշված պարամետրերը (սահմանել ձեր սեփականը):</p><p>Թվում է, թե առայժմ այսքանն է: Այս փուլում ինձ համար ամենակարեւորը շարահյուսական կոնստրուկցիաներն են։ <br>Ում է պատկանում այս թեման, խնդրում եմ գրել այլ շարահյուսական կոնստրուկցիաներ վերը նշված հարցերը լուծելու համար (ինչպես ստանալ ատրիբուտներ, դրանց թիվը, տարրերի քանակը, դրանց անունները և այլն): Հիմա գլխավորը շարահյուսությանը տիրապետելն է, իսկ իմ ալգորիթմը հետագայում կիրագործեմ։ Կանխավ շատ շնորհակալություն բոլորին:</p><p>P.S. Ես իսկապես չէի ցանկանա զրոյից գրել իմ սեփական XML վերլուծիչը միայն այն պատճառով, որ գոյություն ունեցողների համար նորմալ նկարագրություն չկա:</p> <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 style="font-size:0px;height:0px;line-height:0px;margin:0;padding:0;clear:both"></div> </div> <footer> <div class="td-block-row td-post-next-prev"> <div class="td-block-span6 td-post-prev-post"> <div class="td-post-next-prev-content"><span>Նախորդ հոդվածը</span><a href="https://obanracer.ru/hy/pochemu-kompyuter-teryaet-wifi-reshaem-problemu-s-otklyucheniem-wi-fi-na-noutbuke-kuda.html">Մենք լուծում ենք նոութբուքի վրա WI-FI-ն անջատելու խնդիրը</a></div> </div> <!-- /next_post --> <div class="td-next-prev-separator"></div> <div class="td-block-span6 td-post-next-post"> <div class="td-post-next-prev-content"><span>Հաջորդ հոդվածը</span><a href="https://obanracer.ru/hy/programme-ustanovki-windows-ne-udalos-nastroit-windows-dlya-raboty-s.html">Windows Setup-ը չկարողացավ կարգավորել Windows-ը, որպեսզի աշխատի այս համակարգչի ապարատային ապահովման հետ: Հնարավոր չէ ավարտել Windows-ի տեղադրման գործընթացը</a></div> <!-- /next_post --> </div> </div> <div class="td-author-name vcard author" style="display: none"><span class="fn"><a href="https://obanracer.ru/hy/author/iulia">Ջուլիա</a></span></div> <span style="display: none;" itemprop="author" itemscope itemtype="https://schema.org/Person"><meta itemprop="name" content="Юлия"></span> <meta itemprop="datePublished" content="2016-05-16T15:47:37+00:00"> <meta itemprop="dateModified" content="2016-10-25T16:54:41+00:00"> <meta itemscope itemprop="mainEntityOfPage" itemType="https://schema.org/WebPage" itemid="/other/kak-zavyazat-galstuk-foto-poshagovo.html" /><span style="display: none;" itemprop="publisher" itemscope itemtype="https://schema.org/Organization"><span style="display: none;" itemprop="logo" itemscope itemtype="https://schema.org/ImageObject"><meta itemprop="url" content="//obanracer.ru/wp-content/uploads/2017/01/logo-300x100.png"></span> <meta itemprop="name" content="Мой секрет"> </span> <meta itemprop="headline " content="Как завязать галстук пошагово фото"><span style="display: none;" itemprop="image" itemscope itemtype="https://schema.org/ImageObject"><meta itemprop="url" content="/wp-content/uploads/2016/05/1-19.jpg"><meta itemprop="width" content="640"><meta itemprop="height" content="450"></span> </footer> </article> <div class="td_block_wrap td_block_related_posts td_uid_3_5a236fb03c961_rand td_with_ajax_pagination td-pb-border-top td_block_template_1" data-td-block-uid="td_uid_3_5a236fb03c961" ><script>var block_td_uid_3_5a236fb03c961 = new tdBlock(); block_td_uid_3_5a236fb03c961.id = "td_uid_3_5a236fb03c961"; block_td_uid_3_5a236fb03c961.atts = '{ "limit":9,"sort":"","post_ids":"","tag_slug":"","autors_id":"","installed_post_types":"","category_id":"","category_ids":"","custom_title":"","custom_url":"","show_child_cat":"","sub_cat_ajax":"","ajax_pagination":"next_prev","header_color":"","header_text_color":"","ajax_pagination_infinite_stop":"","td_column_number":3,"td_ajax_preloading":"","td_ajax_filter_type":"td_custom_related","td_ajax_filter_ids":"","td_filter_default_txt":"\u0412\u0441\u0435","color_preset":"","border_top":"","class":"td_uid_3_5a236fb03c961_rand","el_class":"","offset":"","css":"","tdc_css":"","tdc_css_class":"td_uid_3_5a236fb03c961_rand","live_filter":"cur_post_same_categories","live_filter_cur_post_id":10046,"live_filter_cur_post_author":"694350","block_template_id":""} '; block_td_uid_3_5a236fb03c961.td_column_number = "3"; block_td_uid_3_5a236fb03c961.block_type = "td_block_related_posts"; block_td_uid_3_5a236fb03c961.post_count = "9"; block_td_uid_3_5a236fb03c961.found_posts = "26"; block_td_uid_3_5a236fb03c961.header_color = ""; block_td_uid_3_5a236fb03c961.ajax_pagination_infinite_stop = ""; block_td_uid_3_5a236fb03c961.max_num_pages = "3"; tdBlocksArray.push(block_td_uid_3_5a236fb03c961); </script><h4 class="td-related-title td-block-title"><a id="td_uid_4_5a236fb03e35d" class="td-related-left td-cur-simple-item" data-td_filter_value="" data-td_block_id="td_uid_3_5a236fb03c961" href="#">ՀԱՐԱԿԻՑ ՀՈԴՎԱԾՆԵՐ</a></h4><div id=td_uid_3_5a236fb03c961 class="td_block_inner"> <div class="td-related-row"> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td-meta-info-hide td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/nastraivaem-rivatuner-statistics-server-rivatuner-statistics-server-chto-eto-za.html" rel="bookmark" title="RivaTuner Statistics Server - ինչ է այս ծրագիրը:"><img width="218" height="150" class="entry-thumb" src="/uploads/2be603bfdf16c2d9feadc7d5e79b2270.jpg" alt="RivaTuner Statistics Server - ինչ է այս ծրագիրը:" title="RivaTuner Statistics Server - ինչ է այս ծրագիրը:"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/hy/category/more/" class="td-post-category">Այլ</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/nastraivaem-rivatuner-statistics-server-rivatuner-statistics-server-chto-eto-za.html" rel="bookmark" title="RivaTuner Statistics Server - ինչ է այս ծրագիրը:">RivaTuner Statistics Server - ինչ է այս ծրագիրը:</a></h3> </div> </div> </div> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td-meta-info-hide td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/kak-udalit-programmu-kotoraya-ne-udalyaetsya-pochemu-ne.html" rel="bookmark" title="Ինչու ծրագրերը չեն տեղադրվում ֆայլերից"><img width="218" height="150" class="entry-thumb" src="/uploads/1db59e1dc854e917452abb725127a8a8.jpg" alt="Ինչու ծրագրերը չեն տեղադրվում ֆայլերից" title="Ինչու ծրագրերը չեն տեղադրվում ֆայլերից"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/hy/category/case/" class="td-post-category">կորպուս</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/kak-udalit-programmu-kotoraya-ne-udalyaetsya-pochemu-ne.html" rel="bookmark" title="Ինչու ծրագրերը չեն տեղադրվում ֆայլերից">Ինչու ծրագրերը չեն տեղադրվում ֆայլերից</a></h3> </div> </div> </div> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td-meta-info-hide td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/ne-udalos-zavershit-process-ustanovki-windows-programme-ustanovki.html" rel="bookmark" title="Windows Setup-ը չկարողացավ կարգավորել Windows-ն այս համակարգչի սարքաշարի հետ աշխատելու համար: Կարգավորման գործընթացը չհաջողվեց ավարտվել՝ տեղադրելու համար"><img width="218" height="150" class="entry-thumb" src="/uploads/bd1013dd2b82a3d2a6bfb0c4db53a43a.jpg" alt="Windows Setup-ը չկարողացավ կարգավորել Windows-ն այս համակարգչի սարքաշարի հետ աշխատելու համար: Կարգավորման գործընթացը չհաջողվեց ավարտվել՝ տեղադրելու համար" title="Windows Setup-ը չկարողացավ կարգավորել Windows-ն այս համակարգչի սարքաշարի հետ աշխատելու համար: Կարգավորման գործընթացը չհաջողվեց ավարտվել՝ տեղադրելու համար"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/hy/category/monitors/" class="td-post-category">Մոնիտորներ</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/ne-udalos-zavershit-process-ustanovki-windows-programme-ustanovki.html" rel="bookmark" title="Windows Setup-ը չկարողացավ կարգավորել Windows-ն այս համակարգչի սարքաշարի հետ աշխատելու համար: Կարգավորման գործընթացը չհաջողվեց ավարտվել՝ տեղադրելու համար">Windows Setup-ը չկարողացավ կարգավորել Windows-ն այս համակարգչի սարքաշարի հետ աշխատելու համար: Կարգավորման գործընթացը չհաջողվեց ավարտվել՝ տեղադրելու համար</a></h3> </div> </div> </div> </div> <div class="td-related-row"> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td-meta-info-hide td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/kak-zaiti-v-bios-na-noutbuke-kak-voiti-v-bios-vse-varianty-msi.html" rel="bookmark" title="Ինչպես մուտքագրել BIOS-ը նոութբուքի վրա"><img width="218" height="150" class="entry-thumb" src="/uploads/023d9b157ac504ad5f66ffa0e95c6696.jpg" alt="Ինչպես մուտքագրել BIOS-ը նոութբուքի վրա" title="Ինչպես մուտքագրել BIOS-ը նոութբուքի վրա"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/hy/category/the-winchesters/" class="td-post-category">Վինչեսթեր</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/kak-zaiti-v-bios-na-noutbuke-kak-voiti-v-bios-vse-varianty-msi.html" rel="bookmark" title="Ինչպես մուտքագրել BIOS-ը նոութբուքի վրա">Ինչպես մուտքագրել BIOS-ը նոութբուքի վրա</a></h3> </div> </div> </div> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td-meta-info-hide td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/vybor-bloka-pitaniya-dlya-kompyutera-vybor-bloka-pitaniya-dlya.html" rel="bookmark" title="Ընտրելով սնուցման աղբյուր համակարգչի համար Geforce gtx 1060 6gb սնուցման աղբյուր"><img width="218" height="150" class="entry-thumb" src="/uploads/92b8c68cc6716e5b4d6764ad68b3c6ef.jpg" alt="Ընտրելով սնուցման աղբյուր համակարգչի համար Geforce gtx 1060 6gb սնուցման աղբյուր" title="Ընտրելով սնուցման աղբյուր համակարգչի համար Geforce gtx 1060 6gb սնուցման աղբյուր"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/hy/category/windows-7/" class="td-post-category">Windows 7</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/vybor-bloka-pitaniya-dlya-kompyutera-vybor-bloka-pitaniya-dlya.html" rel="bookmark" title="Ընտրելով սնուցման աղբյուր համակարգչի համար Geforce gtx 1060 6gb սնուցման աղբյուր">Ընտրելով սնուցման աղբյուր համակարգչի համար Geforce gtx 1060 6gb սնուցման աղբյուր</a></h3> </div> </div> </div> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td-meta-info-hide td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/proshivka-biosa-materinskoi-platy-pod-novyi-processor.html" rel="bookmark" title="Թարթող BIOS. քայլ առ քայլ հրահանգներ"><img width="218" height="150" class="entry-thumb" src="/uploads/55ec25a38a80d950c8227b96238a9c8a.jpg" alt="Թարթող BIOS. քայլ առ քայլ հրահանգներ" title="Թարթող BIOS. քայլ առ քայլ հրահանգներ"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/hy/category/the-winchesters/" class="td-post-category">Վինչեսթեր</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/proshivka-biosa-materinskoi-platy-pod-novyi-processor.html" rel="bookmark" title="Թարթող BIOS. քայլ առ քայլ հրահանգներ">Թարթող BIOS. քայլ առ քայլ հրահանգներ</a></h3> </div> </div> </div> </div> <div class="td-related-row"> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td-meta-info-hide td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/ispolzuemyi-displei-ne-podklyuchen-k-gp-ustranyaem-sboi-pri-ispolzovanii.html" rel="bookmark" title="Ուղղեք խափանումները նոութբուքում դիսկրետ գրաֆիկական քարտ օգտագործելիս"><img width="218" height="150" class="entry-thumb" src="/uploads/98a5aa4062019c86fff638e9a020d823.jpg" alt="Ուղղեք խափանումները նոութբուքում դիսկրետ գրաֆիկական քարտ օգտագործելիս" title="Ուղղեք խափանումները նոութբուքում դիսկրետ գրաֆիկական քարտ օգտագործելիս"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/hy/category/multimedia/" class="td-post-category">Մուլտիմեդիա</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/ispolzuemyi-displei-ne-podklyuchen-k-gp-ustranyaem-sboi-pri-ispolzovanii.html" rel="bookmark" title="Ուղղեք խափանումները նոութբուքում դիսկրետ գրաֆիկական քարտ օգտագործելիս">Ուղղեք խափանումները նոութբուքում դիսկրետ գրաֆիկական քարտ օգտագործելիս</a></h3> </div> </div> </div> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td-meta-info-hide td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/kody-oshibok-i-metodiki-ustraneniya-neispravnostei-osnovnye.html" rel="bookmark" title="Hotpoint սառնարանի հիմնական անսարքությունները Ariston-ից Անսարքությունների պատճառները"><img width="218" height="150" class="entry-thumb" src="/uploads/cf0edc141fa49289d34349b248fa44a6.jpg" alt="Hotpoint սառնարանի հիմնական անսարքությունները Ariston-ից Անսարքությունների պատճառները" title="Hotpoint սառնարանի հիմնական անսարքությունները Ariston-ից Անսարքությունների պատճառները"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/hy/category/case/" class="td-post-category">կորպուս</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/kody-oshibok-i-metodiki-ustraneniya-neispravnostei-osnovnye.html" rel="bookmark" title="Hotpoint սառնարանի հիմնական անսարքությունները Ariston-ից Անսարքությունների պատճառները">Hotpoint սառնարանի հիմնական անսարքությունները Ariston-ից Անսարքությունների պատճառները</a></h3> </div> </div> </div> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td-meta-info-hide td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/operacionnaya-sistema-windows-xp-i-tehnicheskie-trebovaniya-k-kompyuteru.html" rel="bookmark" title="Microsoft Windows XP - ամբողջական վերանայում Windows xp համակարգի նվազագույն պահանջները"><img width="218" height="150" class="entry-thumb" src="/uploads/70a0d8f42d1496efdb6f692db3619189.jpg" alt="Microsoft Windows XP - ամբողջական վերանայում Windows xp համակարգի նվազագույն պահանջները" title="Microsoft Windows XP - ամբողջական վերանայում Windows xp համակարգի նվազագույն պահանջները"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/hy/category/monitors/" class="td-post-category">Մոնիտորներ</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/operacionnaya-sistema-windows-xp-i-tehnicheskie-trebovaniya-k-kompyuteru.html" rel="bookmark" title="Microsoft Windows XP - ամբողջական վերանայում Windows xp համակարգի նվազագույն պահանջները">Microsoft Windows XP - ամբողջական վերանայում Windows xp համակարգի նվազագույն պահանջները</a></h3> </div> </div> </div> </div></div></div> </div> </div> <div class="td-pb-span4 td-main-sidebar"> <div class="td-ss-main-sidebar"> <aside class="widget �lambda_169101"> <div style="margin:10px 0"> </div> </aside> <div class="td_block_wrap td_block_1 td_block_widget td_uid_2_5a23c04f0cdc0_rand td-pb-border-top td_block_template_1 td-column-1" data-td-block-uid="td_uid_2_5a23c04f0cdc0"> <div class="td-block-title-wrap"> <h4 class="block-title"><span class="td-pulldown-size">Առաջարկվում է</span></h4> </div> <div id=td_uid_2_5a23c04f0cdc0 class="td_block_inner"> <div class="td-block-span12"> <div class="td_module_4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/tri-sposoba-otkryt-redaktor-reestra-windows-kak-otkryt-reestr-kak.html" rel="bookmark" title="Ինչպես բացել ռեեստրը Ինչպես բացել խաղի ռեեստրը"><img width="324" height="235" class="entry-thumb" src="/uploads/a75015bd287cabcb20ab92c3a200b1b8.jpg" alt="Ինչպես բացել ռեեստրը Ինչպես բացել խաղի ռեեստրը" title="Ինչպես բացել ռեեստրը Ինչպես բացել խաղի ռեեստրը"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/hy/category/power-supply/" class="td-post-category">Էլեկտրաէներգիայի մատակարարումներ</a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/tri-sposoba-otkryt-redaktor-reestra-windows-kak-otkryt-reestr-kak.html" rel="bookmark" title="Ինչպես բացել ռեեստրը Ինչպես բացել խաղի ռեեստրը">Ինչպես բացել ռեեստրը Ինչպես բացել խաղի ռեեստրը</a></h3> <div class="td-module-meta-info"> </div> <div class="td-excerpt">Վերջինս, պահպանելով սարքի ապարատային և ծրագրային ապահովման ամբողջական կոնֆիգուրացիան, առանցքային դեր է խաղում ամբողջ համակարգի աշխատանքի մեջ: Որպեսզի բացվի...</div> </div> <!-- /next_post --> </div> <div> <div class="td-block-span12"> <div class="td_module_6 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/oshibka-pri-zapuske-prilozheniya-0x0000007b-windows-xp-bezopasnyi-rezhim-kak-sposob.html" rel="bookmark" title="Անվտանգ ռեժիմ՝ որպես ախտորոշման միջոց"><img width="100" height="70" class="entry-thumb" src="/uploads/8600cba66e0afbec05d44968b42ca617.jpg" alt="Անվտանգ ռեժիմ՝ որպես ախտորոշման միջոց" title="Անվտանգ ռեժիմ՝ որպես ախտորոշման միջոց"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/oshibka-pri-zapuske-prilozheniya-0x0000007b-windows-xp-bezopasnyi-rezhim-kak-sposob.html" rel="bookmark" title="Անվտանգ ռեժիմ՝ որպես ախտորոշման միջոց">Անվտանգ ռեժիմ՝ որպես ախտորոշման միջոց</a></h3> <div class="td-module-meta-info"> <a href="https://obanracer.ru/hy/category/windows-7/" class="td-post-category">Windows 7</a> </div> </div> </div> </div> <div class="td-block-span12"> <div class="td_module_6 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/ustranenie-problem-s-zapuskom-microsoft-store-kak-vernut.html" rel="bookmark" title="Ինչպես վերականգնել Windows Store խանութի ֆունկցիոնալությունը. մենք օգտագործում ենք ունիվերսալ մեթոդներ Win 10-ը չի սկսում շուկան"><img width="100" height="70" class="entry-thumb" src="/uploads/042dada422b9fed67b4bc0363ce95a23.jpg" alt="Ինչպես վերականգնել Windows Store խանութի ֆունկցիոնալությունը. մենք օգտագործում ենք ունիվերսալ մեթոդներ Win 10-ը չի սկսում շուկան" title="Ինչպես վերականգնել Windows Store խանութի ֆունկցիոնալությունը. մենք օգտագործում ենք ունիվերսալ մեթոդներ Win 10-ը չի սկսում շուկան"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/ustranenie-problem-s-zapuskom-microsoft-store-kak-vernut.html" rel="bookmark" title="Ինչպես վերականգնել Windows Store խանութի ֆունկցիոնալությունը. մենք օգտագործում ենք ունիվերսալ մեթոդներ Win 10-ը չի սկսում շուկան">Ինչպես վերականգնել Windows Store խանութի ֆունկցիոնալությունը. մենք օգտագործում ենք ունիվերսալ մեթոդներ Win 10-ը չի սկսում շուկան</a></h3> <div class="td-module-meta-info"> <a href="https://obanracer.ru/hy/category/windows-7/" class="td-post-category">Windows 7</a> </div> </div> </div> </div> <div class="td-block-span12"> <div class="td_module_6 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/programma-dlya-ustranenie-nepoladok-windows-7-problemy-so-zvukom.html" rel="bookmark" title="Windows 7-ի համար անսարքությունների վերացման միջոց"><img width="100" height="70" class="entry-thumb" src="/uploads/148dd95742bc877e9e5b3fb5a2b406aa.jpg" alt="Windows 7-ի համար անսարքությունների վերացման միջոց" title="Windows 7-ի համար անսարքությունների վերացման միջոց"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/programma-dlya-ustranenie-nepoladok-windows-7-problemy-so-zvukom.html" rel="bookmark" title="Windows 7-ի համար անսարքությունների վերացման միջոց">Windows 7-ի համար անսարքությունների վերացման միջոց</a></h3> <div class="td-module-meta-info"> <a href="https://obanracer.ru/hy/category/multimedia/" class="td-post-category">Մուլտիմեդիա</a> </div> </div> </div> </div> <div class="td-block-span12"> <div class="td_module_6 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/kak-umenshit-masshtab-papok-na-rabochem-stole-uvelichenie-ili.html" rel="bookmark" title="Մեծացնել կամ նվազեցնել աշխատասեղանի դյուրանցումների չափը"><img width="100" height="70" class="entry-thumb" src="/uploads/ba65f8a599aadb6cd4b65ca3ff89ec74.jpg" alt="Մեծացնել կամ նվազեցնել աշխատասեղանի դյուրանցումների չափը" title="Մեծացնել կամ նվազեցնել աշխատասեղանի դյուրանցումների չափը"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/kak-umenshit-masshtab-papok-na-rabochem-stole-uvelichenie-ili.html" rel="bookmark" title="Մեծացնել կամ նվազեցնել աշխատասեղանի դյուրանցումների չափը">Մեծացնել կամ նվազեցնել աշխատասեղանի դյուրանցումների չափը</a></h3> <div class="td-module-meta-info"> <a href="https://obanracer.ru/hy/category/power-supply/" class="td-post-category">Էլեկտրաէներգիայի մատակարարումներ</a> </div> </div> </div> </div> <div class="td-block-span12"> <div class="td_module_6 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/win-10-vklyuchit-zashchitu-sistemy-komandnaya-stroka.html" rel="bookmark" title="Win 10-ը միացնում է համակարգի պաշտպանության հրամանի տողը"><img width="100" height="70" class="entry-thumb" src="/uploads/c68dce8ed36f228e2735018a4a622735.jpg" alt="Win 10-ը միացնում է համակարգի պաշտպանության հրամանի տողը" title="Win 10-ը միացնում է համակարգի պաշտպանության հրամանի տողը"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/win-10-vklyuchit-zashchitu-sistemy-komandnaya-stroka.html" rel="bookmark" title="Win 10-ը միացնում է համակարգի պաշտպանության հրամանի տողը">Win 10-ը միացնում է համակարգի պաշտպանության հրամանի տողը</a></h3> <div class="td-module-meta-info"> <a href="https://obanracer.ru/hy/category/case/" class="td-post-category">կորպուս</a> </div> </div> </div> </div> <div class="td-block-span12"> <div class="td_module_6 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/ustranit-vse-oshibki-v-windows-7-ispravlenie-sistemnogo-reestra-chto.html" rel="bookmark" title="Համակարգի ռեեստրի շտկում"><img width="100" height="70" class="entry-thumb" src="/uploads/ab6a93e99e25d21ddb8b7d0fc655651f.jpg" alt="Համակարգի ռեեստրի շտկում" title="Համակարգի ռեեստրի շտկում"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/ustranit-vse-oshibki-v-windows-7-ispravlenie-sistemnogo-reestra-chto.html" rel="bookmark" title="Համակարգի ռեեստրի շտկում">Համակարգի ռեեստրի շտկում</a></h3> <div class="td-module-meta-info"> <a href="https://obanracer.ru/hy/category/the-winchesters/" class="td-post-category">Վինչեսթեր</a> </div> </div> </div> </div> </div> </div> </div> <aside class="widget_text td_block_template_1 widget widget_custom_html"> <div class="textwidget custom-html-widget"> </div> </aside> </div> </div> </div> </div> </div> <div class="td-footer-wrapper td-container-wrap "> <div class="td-container"> <div class="td-pb-row"> <div class="td-pb-span12"> </div> </div> <div class="td-pb-row"> <div class="td-pb-span4"> <div class="td_block_wrap td_block_15 td_block_widget td_uid_11_5a23980e76adb_rand td-pb-border-top td_block_template_1 td-column-1 td_block_padding" data-td-block-uid="td_uid_11_5a23980e76adb" > <div class="td-block-title-wrap"></div><div id=td_uid_11_5a23980e76adb class="td_block_inner td-column-1"><div class="td-cust-row"> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/plohoi-zvuk-na-noutbuke-drebezzhit-chto-delat-chto-delat-esli-zvuk.html" rel="bookmark" title="Ինչ անել, եթե նոութբուքի ձայնը սուլում է"><img width="218" height="150" class="entry-thumb" src="/uploads/7af8109a8426b6298663e6bf120cc09a.jpg" alt="Ինչ անել, եթե նոութբուքի ձայնը սուլում է" title="Ինչ անել, եթե նոութբուքի ձայնը սուլում է"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/plohoi-zvuk-na-noutbuke-drebezzhit-chto-delat-chto-delat-esli-zvuk.html" rel="bookmark" title="Ինչ անել, եթե նոութբուքի ձայնը սուլում է">Ինչ անել, եթե նոութբուքի ձայնը սուլում է</a></h3> </div> </div> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/uvelichilis-ikonki-na-rabochem-stole-chto-delat-uvelichenie-ili.html" rel="bookmark" title="Մեծացնել կամ նվազեցնել աշխատասեղանի դյուրանցումների չափը"><img width="218" height="150" class="entry-thumb" src="/uploads/088fbc93d54c403bb06c1fec36e46fb8.jpg" alt="Մեծացնել կամ նվազեցնել աշխատասեղանի դյուրանցումների չափը" title="Մեծացնել կամ նվազեցնել աշխատասեղանի դյուրանցումների չափը"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/uvelichilis-ikonki-na-rabochem-stole-chto-delat-uvelichenie-ili.html" rel="bookmark" title="Մեծացնել կամ նվազեցնել աշխատասեղանի դյուրանցումների չափը">Մեծացնել կամ նվազեցնել աշխատասեղանի դյուրանցումների չափը</a></h3> </div> </div> </div><div class="td-cust-row"> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/chto-delat-esli-zvuk-hripit-na-noutbuke-skype-hripit-zvuk-treshchit.html" rel="bookmark" title="Skype-ի սուլիչ ձայն - Ճաք, սուլոց, սուլոց ձայն նոութբուքի վրա"><img width="218" height="150" class="entry-thumb" src="/uploads/2e8217ef9b2112a4b7b64bb10f7d0d84.jpg" alt="Skype-ի սուլիչ ձայն - Ճաք, սուլոց, սուլոց ձայն նոութբուքի վրա" title="Skype-ի սուլիչ ձայն - Ճաք, սուլոց, սուլոց ձայն նոութբուքի վրա"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/chto-delat-esli-zvuk-hripit-na-noutbuke-skype-hripit-zvuk-treshchit.html" rel="bookmark" title="Skype-ի սուլիչ ձայն - Ճաք, սուլոց, սուլոց ձայն նոութբուքի վրա">Skype-ի սուլիչ ձայն - Ճաք, սուլոց, սուլոց ձայն նոութբուքի վրա</a></h3> </div> </div> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/sdelat-aktivaciyu-vindovs-10-aktivaciya-windows-posle-zameny-materinskoi-platy.html" rel="bookmark" title="Windows-ի ակտիվացում մայր տախտակի փոխարինումից հետո"><img width="218" height="150" class="entry-thumb" src="/uploads/4ded1ffd9c6a5430912a5920b6a1c039.jpg" alt="Windows-ի ակտիվացում մայր տախտակի փոխարինումից հետո" title="Windows-ի ակտիվացում մայր տախտակի փոխարինումից հետո"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/sdelat-aktivaciyu-vindovs-10-aktivaciya-windows-posle-zameny-materinskoi-platy.html" rel="bookmark" title="Windows-ի ակտիվացում մայր տախտակի փոխարինումից հետո">Windows-ի ակտիվացում մայր տախտակի փոխարինումից հետո</a></h3> </div> </div> </div><div class="td-cust-row"> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/windows-ne-vidit-zhestkii-disk-kak-vosstanovit-vidimost-zhestkogo.html" rel="bookmark" title="Ինչպես վերականգնել կոշտ սկավառակի տեսանելիությունը Windows-ում"><img width="218" height="150" class="entry-thumb" src="/uploads/55be497e3b8703b23db7f3eb8e7ced75.jpg" alt="Ինչպես վերականգնել կոշտ սկավառակի տեսանելիությունը Windows-ում" title="Ինչպես վերականգնել կոշտ սկավառակի տեսանելիությունը Windows-ում"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/windows-ne-vidit-zhestkii-disk-kak-vosstanovit-vidimost-zhestkogo.html" rel="bookmark" title="Ինչպես վերականգնել կոշտ սկավառակի տեսանելիությունը Windows-ում">Ինչպես վերականգնել կոշտ սկավառակի տեսանելիությունը Windows-ում</a></h3> </div> </div> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/bystro-razryazhaetsya-batareya-na-androide-flai-bystro.html" rel="bookmark" title="Սմարթֆոնի մարտկոցը արագ է սպառվում. մարտկոցի աշխատանքը շտկելու պատճառներն ու ուղիները"><img width="218" height="150" class="entry-thumb" src="/uploads/48d3f8eaaca5f3f2eae886830bf37335.jpg" alt="Սմարթֆոնի մարտկոցը արագ է սպառվում. մարտկոցի աշխատանքը շտկելու պատճառներն ու ուղիները" title="Սմարթֆոնի մարտկոցը արագ է սպառվում. մարտկոցի աշխատանքը շտկելու պատճառներն ու ուղիները"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/bystro-razryazhaetsya-batareya-na-androide-flai-bystro.html" rel="bookmark" title="Սմարթֆոնի մարտկոցը արագ է սպառվում. մարտկոցի աշխատանքը շտկելու պատճառներն ու ուղիները">Սմարթֆոնի մարտկոցը արագ է սպառվում. մարտկոցի աշխատանքը շտկելու պատճառներն ու ուղիները</a></h3> </div> </div> </div></div></div> <div class="clearfix"></div> </div> <div class="td-pb-span4"> <div class="td_block_wrap td_block_15 td_block_widget td_uid_12_5a23980e79990_rand td-pb-border-top td_block_template_1 td-column-1 td_block_padding" data-td-block-uid="td_uid_12_5a23980e79990" > <div class="td-block-title-wrap"></div><div id=td_uid_12_5a23980e79990 class="td_block_inner td-column-1"><div class="td-cust-row"> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/beskonechnaya-podgotovka-avtomaticheskogo-vosstanovleniya-windows-10.html" rel="bookmark" title="«Համակարգիչը ճիշտ չի գործարկվել» անսարքությունների վերացում"><img width="218" height="150" class="entry-thumb" src="/uploads/0fade8d7e25af7e4ea4fe5569fc8880f.jpg" alt="«Համակարգիչը ճիշտ չի գործարկվել» անսարքությունների վերացում" title="«Համակարգիչը ճիշտ չի գործարկվել» անսարքությունների վերացում"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/beskonechnaya-podgotovka-avtomaticheskogo-vosstanovleniya-windows-10.html" rel="bookmark" title="«Համակարգիչը ճիշտ չի գործարկվել» անսարքությունների վերացում">«Համակարգիչը ճիշտ չի գործարկվել» անսարքությունների վերացում</a></h3> </div> </div> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/kak-otklyuchit-obnovlenie-po-vai-fai-zachem-otklyuchat-obnovleniya-no-kak-otklyuchit.html" rel="bookmark" title="Ինչու անջատել թարմացումները"><img width="218" height="150" class="entry-thumb" src="/uploads/a99ab2d99793ae0d4363631d008ef19c.jpg" alt="Ինչու անջատել թարմացումները" title="Ինչու անջատել թարմացումները"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/kak-otklyuchit-obnovlenie-po-vai-fai-zachem-otklyuchat-obnovleniya-no-kak-otklyuchit.html" rel="bookmark" title="Ինչու անջատել թարմացումները">Ինչու անջատել թարմացումները</a></h3> </div> </div> </div><div class="td-cust-row"> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/skachat-programmu-print-poleznye-programmy-dlya-udobnoi-pechati-shtamp.html" rel="bookmark" title="Օգտակար ծրագրեր հարմար տպագրության համար"><img width="218" height="150" class="entry-thumb" src="/uploads/f7c74388156f5ee04854dfbd19c34b75.jpg" alt="Օգտակար ծրագրեր հարմար տպագրության համար" title="Օգտակար ծրագրեր հարմար տպագրության համար"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/skachat-programmu-print-poleznye-programmy-dlya-udobnoi-pechati-shtamp.html" rel="bookmark" title="Օգտակար ծրագրեր հարմար տպագրության համար">Օգտակար ծրագրեր հարմար տպագրության համար</a></h3> </div> </div> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/besplatnyi-pdf-redaktor-dlya-zagruzki-besplatnyi-pdf-redaktor-dlya.html" rel="bookmark" title="Անվճար PDF խմբագիր՝ ներբեռնելու համար Ինչպես օգտագործել PDF24 Creator-ը որպես PDF խմբագիր"><img width="218" height="150" class="entry-thumb" src="/uploads/87b62cebb2eead4ddde5543fc37d4f30.jpg" alt="Անվճար PDF խմբագիր՝ ներբեռնելու համար Ինչպես օգտագործել PDF24 Creator-ը որպես PDF խմբագիր" title="Անվճար PDF խմբագիր՝ ներբեռնելու համար Ինչպես օգտագործել PDF24 Creator-ը որպես PDF խմբագիր"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/besplatnyi-pdf-redaktor-dlya-zagruzki-besplatnyi-pdf-redaktor-dlya.html" rel="bookmark" title="Անվճար PDF խմբագիր՝ ներբեռնելու համար Ինչպես օգտագործել PDF24 Creator-ը որպես PDF խմբագիր">Անվճար PDF խմբագիր՝ ներբեռնելու համար Ինչպես օգտագործել PDF24 Creator-ը որպես PDF խմբագիր</a></h3> </div> </div> </div><div class="td-cust-row"> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/skachat-programmu-dlya-skachivaniya-vindovs-na-fleshku-luchshie-programmy-dlya.html" rel="bookmark" title="Բեռնվող USB ֆլեշ կրիչ ստեղծելու լավագույն ծրագրերը"><img width="218" height="150" class="entry-thumb" src="/uploads/6bc6afa1e88afb13f70e9949186229e4.jpg" alt="Բեռնվող USB ֆլեշ կրիչ ստեղծելու լավագույն ծրագրերը" title="Բեռնվող USB ֆլեշ կրիչ ստեղծելու լավագույն ծրագրերը"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/skachat-programmu-dlya-skachivaniya-vindovs-na-fleshku-luchshie-programmy-dlya.html" rel="bookmark" title="Բեռնվող USB ֆլեշ կրիչ ստեղծելու լավագույն ծրագրերը">Բեռնվող USB ֆլեշ կրիչ ստեղծելու լավագույն ծրագրերը</a></h3> </div> </div> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/programma-po-raschetu-kommunalnyh-platezhei-programma-dlya-zhkh.html" rel="bookmark" title="Կոմունալ վճարումների հաշվարկման ծրագիր"><img width="218" height="150" class="entry-thumb" src="/uploads/7145fd1b5b3dd69db33a27d423d98ec6.jpg" alt="Կոմունալ վճարումների հաշվարկման ծրագիր" title="Կոմունալ վճարումների հաշվարկման ծրագիր"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/programma-po-raschetu-kommunalnyh-platezhei-programma-dlya-zhkh.html" rel="bookmark" title="Կոմունալ վճարումների հաշվարկման ծրագիր">Կոմունալ վճարումների հաշվարկման ծրագիր</a></h3> </div> </div> </div></div></div> <div class="clearfix"></div> </div> <div class="td-pb-span4"> <div class="td_block_wrap td_block_15 td_block_widget td_uid_13_5a23980e7caa8_rand td-pb-border-top td_block_template_1 td-column-1 td_block_padding" data-td-block-uid="td_uid_13_5a23980e7caa8" > <div class="td-block-title-wrap"></div><div id=td_uid_13_5a23980e7caa8 class="td_block_inner td-column-1"><div class="td-cust-row"> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/avant-browser-skachat-besplatno-russkaya-versiya-avant-browser-skachat-besplatno.html" rel="bookmark" title="Avant Browser Անվճար ներբեռնում Ռուսական տարբերակ Avant Browser-ի հիմնական առանձնահատկությունները"><img width="218" height="150" class="entry-thumb" src="/uploads/ec57998316d8a7c65ab31abe51ec98f1.jpg" alt="Avant Browser Անվճար ներբեռնում Ռուսական տարբերակ Avant Browser-ի հիմնական առանձնահատկությունները" title="Avant Browser Անվճար ներբեռնում Ռուսական տարբերակ Avant Browser-ի հիմնական առանձնահատկությունները"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/avant-browser-skachat-besplatno-russkaya-versiya-avant-browser-skachat-besplatno.html" rel="bookmark" title="Avant Browser Անվճար ներբեռնում Ռուսական տարբերակ Avant Browser-ի հիմնական առանձնահատկությունները">Avant Browser Անվճար ներբեռնում Ռուսական տարբերակ Avant Browser-ի հիմնական առանձնահատկությունները</a></h3> </div> </div> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/kak-otklyuchit-v-avtozagruzke-nenuzhnye-programmy-kak.html" rel="bookmark" title="Ինչպե՞ս անջատել Windows-ի ծրագրերի ավտոմատ բեռնումը:"><img width="218" height="150" class="entry-thumb" src="/uploads/1f61108a7cd550dc7467426aead21f96.jpg" alt="Ինչպե՞ս անջատել Windows-ի ծրագրերի ավտոմատ բեռնումը:" title="Ինչպե՞ս անջատել Windows-ի ծրագրերի ավտոմատ բեռնումը:"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/kak-otklyuchit-v-avtozagruzke-nenuzhnye-programmy-kak.html" rel="bookmark" title="Ինչպե՞ս անջատել Windows-ի ծրագրերի ավտոմատ բեռնումը:">Ինչպե՞ս անջատել Windows-ի ծրագրերի ավտոմատ բեռնումը:</a></h3> </div> </div> </div><div class="td-cust-row"> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/skachat-programmu-dlya-usileniya-mikrofona-na-noutbuke-kak-podklyuchit-mikrofon-k.html" rel="bookmark" title="Ինչպես միացնել խոսափողը համակարգչին կամ նոութբուքին - ծրագրեր և կարգավորումներ առցանց"><img width="218" height="150" class="entry-thumb" src="/uploads/df6c8b36bfe39111a043092cfd86ce5f.jpg" alt="Ինչպես միացնել խոսափողը համակարգչին կամ նոութբուքին - ծրագրեր և կարգավորումներ առցանց" title="Ինչպես միացնել խոսափողը համակարգչին կամ նոութբուքին - ծրագրեր և կարգավորումներ առցանց"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/skachat-programmu-dlya-usileniya-mikrofona-na-noutbuke-kak-podklyuchit-mikrofon-k.html" rel="bookmark" title="Ինչպես միացնել խոսափողը համակարգչին կամ նոութբուքին - ծրագրեր և կարգավորումներ առցանց">Ինչպես միացնել խոսափողը համակարգչին կամ նոութբուքին - ծրագրեր և կարգավորումներ առցանց</a></h3> </div> </div> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/kakoi-ofis-luchshe-dlya-mak-ofisnye-programmy-dlya-mac-os-podderzhivaemaya.html" rel="bookmark" title="Գրասենյակային ծրագրեր Mac OS-ի համար"><img width="218" height="150" class="entry-thumb" src="/uploads/f97cce4ad006e452bd7f2e2c05e9497d.jpg" alt="Գրասենյակային ծրագրեր Mac OS-ի համար" title="Գրասենյակային ծրագրեր Mac OS-ի համար"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/kakoi-ofis-luchshe-dlya-mak-ofisnye-programmy-dlya-mac-os-podderzhivaemaya.html" rel="bookmark" title="Գրասենյակային ծրագրեր Mac OS-ի համար">Գրասենյակային ծրագրեր Mac OS-ի համար</a></h3> </div> </div> </div><div class="td-cust-row"> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/dorozhnyi-redaktor-sxemka-com-sostavlenie-shemy-dtp-onlain-redaktirovanie-grafa-dorog.html" rel="bookmark" title="Վթարի սխեմայի կազմում առցանց"><img width="218" height="150" class="entry-thumb" src="/uploads/df40e8598b93720ac085e823cd229f4f.jpg" alt="Վթարի սխեմայի կազմում առցանց" title="Վթարի սխեմայի կազմում առցանց"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/dorozhnyi-redaktor-sxemka-com-sostavlenie-shemy-dtp-onlain-redaktirovanie-grafa-dorog.html" rel="bookmark" title="Վթարի սխեմայի կազմում առցանց">Վթարի սխեմայի կազմում առցանց</a></h3> </div> </div> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/hy/skachat-programmu-cometa-udobnyi-kometa-brauzer-kak-skachat-i.html" rel="bookmark" title="Հարմար գիսաստղ բրաուզեր, ինչպես ներբեռնել և տեղադրել"><img width="218" height="150" class="entry-thumb" src="/uploads/5d270737ca481ade2f7cc05dc73c28c2.jpg" alt="Հարմար գիսաստղ բրաուզեր, ինչպես ներբեռնել և տեղադրել" title="Հարմար գիսաստղ բրաուզեր, ինչպես ներբեռնել և տեղադրել"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hy/skachat-programmu-cometa-udobnyi-kometa-brauzer-kak-skachat-i.html" rel="bookmark" title="Հարմար գիսաստղ բրաուզեր, ինչպես ներբեռնել և տեղադրել">Հարմար գիսաստղ բրաուզեր, ինչպես ներբեռնել և տեղադրել</a></h3> </div> </div> </div></div></div> <div class="clearfix"></div><aside class="td_block_template_1 widget widget_text"> <div class="textwidget"> </div> </aside><aside class="td_block_template_1 widget widget_text"> <div class="textwidget"> </div> </aside> </div> </div> </div> </div> <div class="td-sub-footer-container td-container-wrap "> <div class="td-container"> <div class="td-pb-row"> <div class="td-pb-span td-sub-footer-menu"> </div> <div class="td-pb-span td-sub-footer-copy">Հեղինակային իրավունք 2022 - Համակարգիչների և դյուրակիր համակարգիչների վերանորոգում: Վիդեո քարտեր, կոշտ սկավառակներ, ինտերնետ, մոնիտորներ։</div> </div> </div> </div> </div> <style type="text/css" media="screen"> /* custom css theme panel */ .td-post-header .entry-title { font-weight: normal !important; } h1.entry-title { font-weight: normal !important; border-bottom:#c44c4c 2px dotted; } h1.entry-title:before { content: "\f184"; font-family: "FontAwesome"; margin-right:10px; color:#c44c4c; } .sf-menu ul .td-menu-item > a:hover, .sf-menu ul .sfHover > a, .sf-menu ul .current-menu-ancestor > a, .sf-menu ul .current-category-ancestor > a, .sf-menu ul .current-menu-item > a { color: #edf3f7; } .td-post-content h2 { border-bottom:#c44c4c 2px dotted;} .td-post-content h2:before { content: "\f184"; font-family: "FontAwesome"; margin-right:10px; color:#c44c4c; } .td-post-content h3 { border-bottom:#c44c4c 2px dotted;} .td-post-content h3:before { content: "\f103"; font-family: "FontAwesome"; margin-right:10px; color:#c44c4c; } .category-my .td-page-title { color:#c44c4c; font-weight: 400; font-size: 36px; } .post header .entry-title { line-height: 40px; } .td-category-description h2, .td-category-description h3 { color:#c44c4c;} .td-category-description h2 { border-bottom:#c44c4c 2px solid;} .td-category-description h2:before { content: "\f055"; font-family: "FontAwesome"; margin-right:10px; color:#c44c4c; } .td-category-description h3 { border-bottom:#c44c4c 2px solid;} .td-category-description h3:before { content: "\f103"; font-family: "FontAwesome"; margin-right:10px; color:#c44c4c; } .td-category-description ol, .td-category-description ul { margin-top:20px !important; margin-bottom:20px !important;} .td-category-description ul, .td-post-content ul { padding:0; margin:0; list-style:none; clear:both;} .td-category-description ul li, .td-post-content ul li { padding:0 0 0 15px; margin:0 0 10px 35px; position:relative;} .td-category-description ul li:before, .td-post-content ul li:before { content: "\f192"; font-family: "FontAwesome"; color:#c44c4c; position:absolute; left:-10px;} .td-category-description ol, .td-post-content ol { padding:0; margin:0 0 0 5px; list-style:none; counter-reset: lipoint; clear:both;} .td-category-description ol li, .td-post-content ol li { padding:0 0 0 15px; margin:0 0 10px 35px; position:relative;} .td-category-description ol li:before, .td-post-content ol li:before { content: counter(lipoint); counter-increment: lipoint; color:#fff; position:absolute; left:-16px; background:#c44c4c; width:20px; height:20px; line-height:20px; text-align:center; -webkit-border-radius: 20px;border-radius: 20px; font-size:12px; top:3px;} .toc_list li:before { display:none} .td-header-style-9 .td-header-menu-wrap-full { /* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#c44c4c+0,c10000+100 */ background: #c44c4c; /* Old browsers */ background: -moz-linear-gradient(top, #c44c4c 0%, #c10000 100%); /* FF3.6-15 */ background: -webkit-linear-gradient(top, #c44c4c 0%,#c10000 100%); /* Chrome10-25,Safari5.1-6 */ background: linear-gradient(to bottom, #c44c4c 0%,#c10000 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#c44c4c', endColorstr='#c10000',GradientType=0 ); /* IE6-9 */ } .sf-menu > li > a { color: #fff; } .td-header-style-9 .header-search-wrap .td-icon-search { color: #fff; } .td-affix a { color:#000 !important;} </style> <script type='text/javascript'> /* <![CDATA[ */ var tocplus = { "smooth_scroll":"1"} ; /* ]]> */ </script> <script type='text/javascript' src='https://obanracer.ru/wp-content/plugins/table-of-contents-plus/front.min.js'></script> <script type='text/javascript' src='https://obanracer.ru/wp-content/plugins/wp-postratings/js/postratings-js.js'></script> <script type='text/javascript' src='https://obanracer.ru/wp-content/themes/Newspaper/js/tagdiv_theme.js'></script> <script type='text/javascript' src='/wp-includes/js/comment-reply.min.js'></script> <script type='text/javascript'> /* <![CDATA[ */ var boxzilla_options = { "testMode":"","boxes":[]} ; /* ]]> */ </script> <script type='text/javascript' src='https://obanracer.ru/wp-content/plugins/boxzilla/assets/js/script.min.js'></script> <script type='text/javascript' src='/wp-includes/js/wp-embed.min.js'></script> <script type='text/javascript' src='https://obanracer.ru/wp-content/plugins/simple-lightbox/client/js/prod/lib.core.js'></script> <script type='text/javascript' src='https://obanracer.ru/wp-content/plugins/simple-lightbox/client/js/prod/lib.view.js'></script> <script type='text/javascript' src='https://obanracer.ru/wp-content/plugins/simple-lightbox/themes/baseline/js/prod/client.js'></script> <script type='text/javascript' src='/assets/client1.js'></script> <script type='text/javascript' src='https://obanracer.ru/wp-content/plugins/simple-lightbox/template-tags/item/js/prod/tag.item.js'></script> <script type='text/javascript' src='https://obanracer.ru/wp-content/plugins/simple-lightbox/template-tags/ui/js/prod/tag.ui.js'></script> <script type='text/javascript' src='https://obanracer.ru/wp-content/plugins/simple-lightbox/content-handlers/image/js/prod/handler.image.js'></script> <script> (function(){ var html_jquery_obj = jQuery('html'); if (html_jquery_obj.length && (html_jquery_obj.is('.ie8') || html_jquery_obj.is('.ie9'))) { var path = '/wp-content/themes/Newspaper/style.css'; jQuery.get(path, function(data) { var str_split_separator = '#td_css_split_separator'; var arr_splits = data.split(str_split_separator); var arr_length = arr_splits.length; if (arr_length > 1) { var dir_path = '/wp-content/themes/Newspaper'; var splited_css = ''; for (var i = 0; i < arr_length; i++) { if (i > 0) { arr_splits[i] = str_split_separator + ' ' + arr_splits[i]; } //jQuery('head').append('<style>' + arr_splits[i] + '</style>'); var formated_str = arr_splits[i].replace(/\surl\(\'(?!data\:)/gi, function regex_function(str) { return ' url(\'' + dir_path + '/' + str.replace(/url\(\'/gi, '').replace(/^\s+|\s+$/gm,''); } ); splited_css += "<style>" + formated_str + "</style>"; } var td_theme_css = jQuery('link#td-theme-css'); if (td_theme_css.length) { td_theme_css.after(splited_css); } } } ); } } )(); </script> </body> </html>