زنگ.

کسانی هستند که این خبر را قبل از شما خوانده اند.
مشترک شدن برای دریافت مقالات تازه.
پست الکترونیک
نام
نام خانوادگی
چگونه می خواهید زنگ را بخوانید
بدون هرزنامه

به تازگی، توجه زیادی به ساختن سیستم های کسب و کار الکترونیکی پرداخت می شود، یا به عنوان آنها نیز نامیده می شود - B2B (کسب و کار به کسب و کار). با توجه به توصیه های در ساخت سیستم های جریان مبادله از هماهنگی فن آوری های اینترنت از بدن - WWW کنسرسیوم: تاکید بر فناوری های XML و ساخت سیستم های اسناد اسناد XML ساخته شده است.

مزیت استفاده از XML در تجارت الکترونیک، راندمان بالا سیستم های B2B در هزینه های پایین برای ایجاد آن به علت نمایش روشن و بصری اطلاعات ساختاری، توانایی استفاده از پروتکل های شبکه مدرن و ایجاد سیستم های کسب و کار در زمان واقعی است.

استقلال ارائه اطلاعات در قالب اسناد XML اجازه می دهد تا متفاوت، شرکت در کسب و کار الکترونیکی، برای تولید مستقل از یکدیگر توسط.

در همه سیستم ها، مبادله معمولا توسط یک طرح مشابه با استفاده از درخواست های HTTP ساخته شده است. پروتکل SSL به عنوان پروتکل SSL اعمال می شود (اما این یک موضوع جداگانه است).

یکی از گزینه های احتمالی برای پردازش پیام های XML، ساخت اجزای BIN / CGI (ISAPI) -News یا COM (سرور) تشکیل یا پردازش اسناد XML است.

از یک طرف، برنامه به عنوان یک مشتری عمل می کند، که در حالت پست یک پرس و جو HTTP را مطرح می کند، از سوی دیگر، یک سرور وب در کنار آن پردازش پرس و جو و پاسخ پردازش شده است. تبادل اطلاعات از اسناد XML استفاده می کند.

یکی از موثرترین گزینه های پیاده سازی، استفاده از تجزیه کننده XML موجود است که از مدل DOM پشتیبانی می کند. چنین تجزیه کننده عرضه توزیع کننده Win`98 یا بخش انتگرال IE 4.7 و بالاتر (برای Win`95) است و نشان دهنده سرور COM واقع در کتابخانه msxml.dll است.

مدل Object Component (COM) داده ها و روش ها را به یک جوهر تک و راهی برای دسترسی به آنها از طریق سیستم رابط بسته بندی شده است. دلفی به سادگی برای دسترسی به کلاس های شیء COM قابل دسترسی است (چندین کلاس ممکن است در یک سرور COM گنجانده شود). دسترسی به اشیاء توسط مقداردهی کردن نمونه کلاس از طریق سیستم رابط انجام می شود. شرح رابط ها توسط زبان تعریف رابط (IDL) انجام می شود، که ممکن است به طور خودکار وسیله ای از رسانه انجام شود.

دلفی به معنای واردات از سرور COM است msxml.dllفایل های توضیحات رابط IDL ساخته شده اند و فایل توصیفی باینری نوع کتابخانه TLB است. این عملیات از طریق منوی سیستم انجام می شود: پروژه | تایپ کتابخانه واردات:(تصویر 1). کادر محاوره ای زیر به نظر می رسد (شکل 2)، که در آن شما می خواهید یک شی COM را انتخاب کنید (در مورد ما، شی به عنوان "Microsoft.XMLDOM (نسخه 2.0)" ثبت شده است و یک فایل TLB ایجاد کنید (دکمه ایجاد واحد) با استفاده از فایل TLB، محیط زیست "Paskalevsky" توضیحات فایل COM سرور را تولید می کند - msxml_tlb.pas

فایل msxml_tlb.pas تمام رابط ها، ثابت ها و سرورهای COM را توصیف می کند.

برای دسترسی به اشیاء عنصر COM، در این دستورالعمل ضروری است استفاده می کند.نام فایل توضیحات کتابخانه را اضافه کنید (msxml_tlb.pas). در زیر ساده ترین برنامه است که از آنالایزر MSXML.dll استاندارد DOM استفاده می کند که سند XML را دانلود می کند و آن را در عنصر جعبه MEMO1 نمایش می دهد.

استفاده می کند. ویندوز، پیام ها، Sysutils، کلاس ها، گرافیک ها، کنترل ها، فرم ها، گفتگوها، Oleserver، MSXML_TLB، StdCtrls؛ نوع tform1 \u003d. کلاس(TFORM) دکمه 1: tbutton؛ memo1: tmemo؛ روش. دکمه 1 کلیک کنید (فرستنده: togject)؛ پایان؛ var فرم 1: tform1؛ پیاده سازی ($ r * .dfm) روش.tform1.button1click (فرستنده: togject)؛ // اعلامیه Soklass Object DomDocument؛ varcodoc: codomdocument؛ // کلاس، سازگار با رابط کاربری iDomDocument؛ vardoc: ixmldocument؛ شروع. // ایجاد یک نمونه از شی DomDocument؛ doc: \u003d codoc.create؛ // یک روش حالت از یک نمونه از شی DomDocument را فراخوانی کنید؛ doc.load ("data.xml")؛ // دسترسی به نمونه مالکیت XML از شی DomDocument؛ memo1.text: \u003d doc.xml؛ پایان؛ پایان.

مفهوم DOM - مدل سند Object

هر سند XML به عنوان مجموعه ای از تعدادی از اشیاء (کلاس ها) نشان داده شده است، که دسترسی به عناصر فردی (زمینه های شی) ممکن است. DOM - رابط دسترسی به هر دو اشیاء ساده DOMString یا PrincesData را توصیف می کند یا عناصر XML جداگانه سند را جدا می کند: DomFragmentElement، Domnode، Domelement.

موارد زیر مهم ترین ویژگی ها و روش های XMLDOMDocument، XMLDOMNODE، XMLDOMNOMELIST هستند. لازم به ذکر است که مدل MSXML.dll XML XML، تجزیه و تحلیل XML XML MSXML.DLL، ارائه شده توسط آنالیز XML XML MSXML.DLL از کنسرسیوم DOM تایید شده توسط مدل W3C استفاده می شود.

شرح کامل تر از اشیاء DOM رابط را می توان یافت

شی XMLDOMDocument
سطح بالایی از سلسله مراتب شی را نشان می دهد و شامل روش هایی برای کار با یک سند است: دانلود، تجزیه و تحلیل، ایجاد عناصر، ویژگی ها، نظرات، نظرات در آن و غیره .
خواص
async اموال شناسایی حالت پردازش فعلی
خطای تجزیه یک مرجع به شیء پردازش خطا xmldomparseError را باز می کند
فعال کردن - غیرفعال کردن تأیید سند
url URL سند را باز می گرداند
مستند سازی حاوی یک مرجع به عنصر ریشه سند به عنوان یک شی XMLDOMemement است.
مواد و روش ها
بار (URL)
loadxml (xmlstring)
یک سند XML را بارگذاری می کند
ذخیره (objtarget) سند XML را در فایل ذخیره می کند
abort قطع روند دانلود و پردازش سند.
createattribute (نام) یک ویژگی جدید را با نام مشخص شده برای مورد فعلی ایجاد می کند.
createnode (نوع، نام، nameSpaceuri) یک گره از نوع مشخص شده و عنوان را ایجاد می کند
createElement (برچسب) یک عنصر سند را با نام مشخص شده ایجاد می کند.
createTextNode (داده ها) متن را درون سند ایجاد می کند
getElementsytagname (Tagname) یک پیوند را به مجموعه ای از موارد سند با نام مشخص شده بازگرداند
nodefromid (idstring) عنصر جستجو توسط شناسه

شی XMLDOMNODE
شی XMLDOMNODE که رابط اصلی DOM را اجرا می کند گره، طراحی شده برای دستکاری با یک گره جداگانه از یک درخت سند. خواص و روش های آن به شما این امکان را می دهد که اطلاعات کامل در مورد گره فعلی دریافت و تغییر دهید - نوع، نام، نام کامل، محتویات آن، لیستی از عناصر کودک و غیره
خواص
nodename، Basename. نام گره فعلی را باز می گرداند.
پیشوند پیشوند فضای نام را باز می گرداند
نوع داده. نوع محتوا گره فعلی را تعریف می کند
nodetype، nodetypestring نوع گره فعلی را باز می گرداند:
ویژگی های. لیستی از ویژگی های گره فعلی را به عنوان مجموعه xmldomnammenmapap باز می گرداند.
متن محتویات پشتیبانی فعلی را در قالب متن باز می گرداند.
xML نمایندگی XML از پشتیبانی فعلی را باز می گرداند.
nodeValue محتویات گره فعلی را باز می گرداند.
childnodes. لیستی از عناصر کودک را به عنوان xmldomnodelist باز می گرداند.
lastchild، lastchild. عنصر اول / آخرین فرزند را باز می گرداند
قبلی، nextsibling عنصر پرستاری قبلی / بعدی را باز می گرداند.
parentnode. حاوی یک مرجع به عنصر والدین است.
مالکیت اشاره گر را به سند بازگرداند که در آن گره فعلی واقع شده است.
مواد و روش ها
appendchild (NewChild) یک عنصر جدید کودک را به گره فعلی اضافه می کند.
insertborefore (newchild، refchild) یک گره کودک را وارد کنید، آن را در زیر قسمت زیر "سمت چپ" گره مشخص شده توسط پارامتر Refchild مشخص کنید.
clonenode (عمیق) یک کپی از عنصر فعلی ایجاد کنید.
getAttribute(نام)
getattributenode. (نام)
setattribute (نام، ارزش)
setattributenode (xmldomattribute)
دسترسی به ویژگی ها (ایجاد، خواندن، نوشتن) شی. نام - نام ویژگی، ارزش - ارزش آن است. مقدار Xmldomattribute شی را باز می گرداند.
repaCechild (NewChild، OldChild) Removechild (OldChild) جایگزینی هدف OldChild از لیست فعلی شرکت های تابعه در NewChild. از بین بردن شیء oldchild
selectSingLende SelectSingLende (PatternString) شی XMLDomNodelist را که توسط الگوی جستجو یا گره اول انتخاب شده است، باز می گرداند
transformnode (Styesheet)
transformnodetObject (سبک، خروجی، خروجی)
یک جدول سبک را برای پشتیبانی از گره فعلی اختصاص می دهد و رشته را به نتیجه پردازش می رساند. یک مرجع به شی DomDocument به عنوان یک پارامتر انتقال می یابد، که در آن دستورالعمل های XSL واقع شده است.

با استفاده از XML در کسب و کار.

برای یک تصویر واضح تر، یک توضیح ضروری است، و چرا همه اینها با آنچه که باید درک کنید، لازم است که چگونه کار می کند:

هنگام ساخت یک سیستم B2B یا شرکت ERP شرکت، هنگام سازماندهی تبادل اطلاعات اسناد XML بین شرکت ها یا شاخه های PROM-I، یک سیستم اطلاعات اثبات شده اثبات شده بر اساس سرورهای وب موجود در پروتکل های HTTP استفاده می شود.

از یک طرف، برنامه به عنوان یک مشتری عمل می کند، که در حالت پست، پرس و جو HTTP را مطرح می کند، از سوی دیگر، سرور وب در کنار آن درخواست پردازش شده و پاسخ است. اسناد XML به عنوان تبادل استفاده می شود.

به عنوان مثال، در یک سیستم ساده شرکت ERP از برنامه حسابداری (حسابداری ACS)، لازم است یک درخواست خاص برای یک فاکتور ایجاد شود و آن را به یک شاخه ای که دارای انبار (ACS انبار) است، انتقال دهد. هنر تنظیم مشابهی از مشکل زمانی است که ایجاد یک B2B از سیستم، زمانی که یک شرکت درخواست دسترسی به محصولات (سفارش خرید برای خرید) از تامین کننده V.

شرکت A و برنامه او به عنوان یک مشتری عمل می کند. انبار در خدمت تامین کننده در WHO دارای یک مجتمع BD انبار در SQL Server است. تبادل از طریق یک تامین کننده وب سرور شرکت انجام می شود.

در زیر، الگوریتم مبادله معمولی زیر است:


شکل 3
  1. شرکت A.آغاز می شود فرآیند A.(سفارش محصول)، که به عنوان یک مشتری وب عمل می کند.
  2. فرآیند A.یک سند XML (به عنوان مثال، یک فاکتور) را تولید می کند و آن را به عنوان یک پرس و جو پست HTTP به سرور تامین کننده وب انتقال می دهد. به عنوان یک URI - یک شناسه درخواست پردازش استفاده می شود. URI ممکن است برای هر نوع اسناد یا فردی برای هر نوع مشابه باشد. این همه به ساختار سرور B2B (وب) بستگی دارد.
  3. وب سرور درخواست را تجزیه و تحلیل می کند و سرور را تولید می کند فرآیند B.با گذراندن یک سند XML به عنوان یک پارامتر.
    فرآیند در وب سرور شروع و پردازش می شود یا به عنوان Page ASP، CGI (ISAPI) - برنامه یا جاوا سورک (برنامه سرور)
  4. فرآیند B.- یک درخواست را به سرور پایگاه داده SQL تولید می کند.
  5. SQL Server عملیات لازم را در پایگاه داده انجام می دهد، پاسخ را تشکیل می دهد و آن را باز می گرداند. فرآیند B..
  6. در پاسخ از SQL Server فرآیند B. یک سند XML (پاسخ) را تولید می کند و به عنوان یک پاسخ به درخواست HTTP به برنامه مشتری اجازه می دهد.
  7. علاوه بر این، بسته به وضعیت در طرف مشتری، یا یک پرس و جو جدید HTTP تشکیل شده است، یا جلسه به پایان می رسد.

چند کلمه در مورد سازمان مدیریت سند.

حاکمیت کلی توسعه سیستم تبادل XML عبارت است از:

  • اول- توسعه مدار جریان اسناد الکترونیکی و ساختار آنها؛
  • دوم- توسعه جداول توابع فرآیندهای (Subprocesses) I.E. چه تابع در رابطه با سند XML هر فرآیند را اجرا خواهد کرد.

هر سند XML، مانند یک سند HTML باید شامل یک هدر پیام (زندانی اطلاعات) و یک پیام پیام (برای پرس و جو این اطلاعات با برچسب گذاری برای پاسخ به درخواست). به منظور سند XML به درستی شکل گرفته است، لازم است که دو جزء آن از "هدر" و "درخواست" به برچسب های فریم، به عنوان مثال لازم است. دیدگاه سند استاندارد زیر ارائه شده است:

عنوان (شکل 4)، در مقایسه با HTML سند، باید شامل انواع اطلاعات خدمات، از جمله اطلاعات مربوط به نوع سند انتقال و پردازش پردازش. پردازش اطلاعاتی سند دریافت شده است، I.E. بخش معنی دار توسط برچسب طراحی شده است. لازم به ذکر است که ساختار هدر باید برای همه انواع اسناد متحد باشد.

برای فرایند در حال اجرا توسط سرور، الگوریتم پردازش ترجیحا (اما لازم نیست) برای ساخت به شرح زیر است:


شکل 6

برخی از لحظات اصلی هنگام ایجاد یک بخش مشتری

همانطور که قبلا توضیح داده شد، هنگام ایجاد یک سند XML از ارائه خود در قالب یک مدل DOM استفاده می کند. در زیر نمونه ای از متن متن دلفی برنامه هدر پیام XML است.

روش.tthread1.headercreate (فرستنده: togject)؛ var // اعلامیه های کلاس برای ایجاد ضروری است codoc: codomdocument؛ // XMLDOMDocument Object doc: domdocument؛ R: ixmldomelement؛ گره: ixmldomelement؛ // domtext txt: ixmldomtext؛ // domattribute attr: ixmldomattribute؛ شروع. // ایجاد سند DOM doc: \u003d codoc.create؛ doc.set_async (نادرست)؛ // شروع اولیه DOM DOM doc.loadXML ("
"); // ایجاد domelement (برچسب<فرستنده.>) گره: \u003d doc.createelement ("فرستنده")؛ // ایجاد یک گره متن " LLC "Typhoon"" TXT: \u003d doc.createtextnode ("LLC" Typhoon ")؛ // اختصاص یک گره<فرستنده.\u003e ارزش // گره متن " LLC "Typhoon"" node.appendchild (txt)؛ // اضافه کردن یک مورد<فرستنده.\u003e در ریشه سند به عنوان یک شرکت تابعه R.Appendchild (گره)؛ <از جانب.> گره: \u003d doc.createelement ("از")؛ TXT: \u003d doc.createtextnode ("http://tayfun.ru/xml/default.asp")؛ node.appendchild (txt)؛ R.Appendchild (گره)؛ // عملیات مشابه برای برچسب<به.> گره: \u003d doc.createelement ("به")؛ txt: \u003d doc.createtextnode ("http://irbis.ru")؛ node.appendchild (txt)؛ R.Appendchild (گره)؛ // ایجاد domelement () گره: \u003d doc.createelement ("typedocument")؛ // ایجاد یک گره xmldomattribute ATT: \u003d doc.createattribute ("ID"، "ORDER")؛ // node.appendchild (ATT)؛ R.Appendchild (گره)؛ پایان؛

لازم به ذکر است که اعلام Codoc: codomdocument و doc: متغیر DomDocument، و همچنین ایجاد روش ایجاد (doc: \u003d codoc.create؛) یک بار انجام می شود. اعلام متغیر در بخش توصیف متغیرهای جهانی است و نه در روش محلی، همانطور که برای دید در این مثال نشان داده شده است (I.E. یک متغیر جهانی از ماژول برنامه یک نوع DomDocument نوع).

نتیجه برنامه فوق، هدر ایجاد شده است، در رابطه با مثال ما از سند XML: در شکل 5 نشان داده شده است.


شکل 5


شکل 6

مزیت اصلی انتقال اطلاعات در قالب اسناد XML این است که ممکن است یک پیام را با استفاده از ساختار مستقل جداول جداول در DBMS هر دو بر روی دریافت شده و در سمت انتقال ارسال کنید. با استفاده از مثال ما، اجازه دهید آن را به انتقال اطلاعات در مورد فاکتورهای شرکت A، از DBMS ساختار نشان داده شده در شکل 6

برای ایجاد یک سند XML حاوی یک فاکتور، یک درخواست SQL اولیه (پرس و جو A) با اطلاعات مربوط به فاکتور:

انتخاب کنید * از invoice_general جایی که. invoicenum \u003d: num انتخاب کنیدمحصولات، قدم زدن، قیمت، hz_cod از جانب.کالا جایی که. invoicenum \u003d: num //: num - پارامتر که شماره فاکتور را مشخص می کند.

در زیر بخشی از برنامه تشکیل بدن سند XML است:

روش. tthread1.databodycreate (فرستنده: tobject)؛ var // کلاس ها و xmldomocument // codoc: codomdocument؛ // باید جهانی باشد، برای کل ماژول. // doc: domdocument؛ // اعلام از اشیاء domelement R: ixmldomelement؛ // domelement؛ گره، node2: ixmldomelement؛ node3، node4: ixmldomelement؛ // domtext txt: ixmldomtext؛ STR: رشته؛ // invoicenumber: عدد صحیح؛ - متغیر جهانی - // Masching 987654 // Querya، Queryb: رشته؛ - متغیر جهانی، // حفظ درخواست به درخواست // Querya - درخواست و اطلاعات عمومی در مورد Infoice // Queryb - اطلاعات پرس و جو B در مورد کالاهای شرح داده شده در // infoice (متن را ببینید) شروع. query.close؛ // مشاهده متن "درخواست A" query.text: \u003d Querya؛ // اعدام درخواست query.execsql؛ query.open؛ // آدرس عنصر ریشه را دریافت کنید r: \u003d doc.get_documentelement؛ node2: \u003d doc.createelement ("درخواست")؛ // ایجاد domelement (برچسب) گره: \u003d doc.createelement ("فاکتور")؛ // اضافه کردن یک آیتم به ریشه R.Appendchild (Node2)؛ // اضافه کردن یک مورد در node2 Appendchild (گره)؛ // ایجاد domelement (برچسب) node3: \u003d doc.createelement ("decurture")؛ // اضافه کردن یک مورد در گره Appendchild (Node3)؛ // درخواست تجدید نظر به فیلد "Decurture" str: \u003d query.fieldbynamename ("decurture"). Asspring؛ // ایجاد یک گره متن \u003d مقدار فیلد // ارزش تکالیف گره // گره متن، خط متغیر node.appendchild (txt)؛ // عملیات مشابه برای برچسب , , // , // (فیلد DB "Consignee") گره: \u003d doc.createelement ("مقصد")؛ // نام زمینه پایگاه داده ممکن است با نام همزمان نباشد str: \u003d query.fieldbyname ("consignee") .ASTRING؛ // تگا، در این مزیت استفاده txt: \u003d doc.createtextnode (str)؛ // رابط DOM قبل از DBMS دارای پشتیبانی از رابط XML، // نوع اوراکل 8I یا MS SQL 2000 node.appendchild (txt)؛ ... // تشکیل یک درخواست برای مشخصات کالا // درخواست دسترسی را بسته می کند query.close؛ // مشاهده متن "درخواست در"، اطلاعات. درباره محصولات query.text: \u003d queryb؛ // اختصاص مقادیر پارامتر query.params.asinteger: \u003d invoicEnumber؛ // اعدام درخواست query2.execsql؛ // باز کردن دسترسی به درخواست داده ها query.open؛ // ایجاد domelement (برچسب) node3: \u003d doc.createlement ("imems")؛ // اضافه کردن یک مورد در گره Appendchild (Node3)؛ // چرخه بر روی تمام درخواست ها در حالی که نه eof.Query. انجام دادن. شروع node4: \u003d doc.createelement ("imem")؛ // اضافه کردن یک مورد در node3.appendchild (node4)؛ // تولید داده برای برچسب STR: \u003d query.fieldbyname ("قیمت"). Asspring؛ txt: \u003d doc.createtextnode (str)؛ node.appendchild (txt)؛ ... // عملیات مشابه برای برچسب ها , , پایان؛ پایان؛

به عنوان یک نتیجه از این روش، متن زیر از سند XML تشکیل شده است:


روش باز برای ایجاد پرس و جو استفاده می شود. ixmlhttprequest:

روش. Open (Const Bstrmethod، - روش type \u003d "post" bstrurl، - آدرس سرور Varasync URL، - حالت ارتباطی ناهمزمان / همزمان \u003d TRUE BSTRUSER، - نام کاربری برای احراز هویت BSTRPassword) - رمز عبور

ایجاد یک بخش سرور از پردازش سند

همانطور که قبلا ذکر شد، پردازش درخواست HTTP را می توان یا برنامه های کاربردی CGI یا Servlets جاوا انجام داد. گزینه های ممکن برای نوشتن صفحات ASP. اما در این مورد، انتقال داده تنها توسط "دریافت" با استفاده از رشته پرس و جو امکان پذیر است. اگر چه، پردازش HTTP از درخواست Page ASP کارآمدتر از برنامه CGI است. با این حال، به نظر من، بدون هیچ گونه تفاوت، نحوه پردازش، و مهمتر از همه برای حل این سوال - نحوه ساخت یک برنامه پردازش، و نه با چه چیزی.

اگر ما گزینه های تشکیل سند XML را از فصل قبلی بررسی کردیم، سپس وظیفه برنامه سرور مخالف اسناد XML است. در زیر بخشی از برنامه است که سند XML را تجزیه و تحلیل می کند:

روش.tthread1.dataparser (فرستنده: tobject)؛ var // اعلام از اشیاء domelement R، fnode: ixmldomelement؛ Str، نام فایل: رشته؛ PARM: رشته؛ // اعلام Soklass و CodocxML، Codocxsl، Codocresult: CodomDocument؛ // XMLDOMDocument Object XMLDOC، XSLDOC، نتیجه DOMDocument؛ // httpstr: رشته؛ - یک متغیر جهانی حاوی رشته پرس و جو HTTP شروع. xmldoc: \u003d codocxml.Create؛ xmldoc.loadxml (httpstr)؛ // آدرس عنصر ریشه را دریافت کنید r: \u003d doc.get_documentelement؛ // به دست آوردن ارزش عنصر fnode: \u003d r.selectorsinglenode ("// typedocument")؛ // دریافت مقدار attribute id \u003d "سفارش" نام فایل: \u003d fnode.getattibute ("id")؛ // و شکل دادن به نام فایل order.xsl نام فایل: \u003d filename + ". XSL"؛ // ایجاد یک سند XSLDOC XSLDOC: \u003d CODOCXSL.CREATE؛ xsldoc.loadxml (filename)؛ // ایجاد یک سند XMLDOC نتیجه: \u003d codocresult.create؛ // تنظیم حالت پردازش همزمان رده doc.set_async (false)؛ // نصب مجدد چک کردن رده doc.ValidateonParase: \u003d درست؛ // COLLAPSE XMLDOC توسط XSL TEMPLATE XMLDOC.TransFormNOC، نتیجه DOC (XSLDOC، نتیجه DOC)؛ // متغیر STR به مقدار متن اختصاص داده شده است // سند نتیجه str: \u003d رده doc.text؛ // عنصر جستجو fnode: \u003d r.selectorsinglenode ("// invoicnumber")؛ // و ارزش عنصر را دریافت کنید Parm: \u003d fnode.text؛ // درخواست دسترسی را بسته می کند query.close؛ query.text: \u003d str؛ // اختصاص مقدار پارامتر query.params.ASTRING: \u003d PARM؛ // اعدام درخواست query.execsql؛ پایان؛

کل طیف وسیعی از تجزیه این است که قالب XSL را اعمال کنید، که برای هر نوع سند به صورت جداگانه تشکیل شده است. نتیجه تجزیه و تحلیل رشته پرس و جو SQL است. در نتیجه، اجرای رشته پرس و جو SQL تولید شده تغییرات لازم را در DBMS انجام خواهد داد.

مزیت استفاده از تجزیه و تحلیل از طریق قالب نیز در این واقعیت است که برخی از انعطاف پذیری داده ها را تبدیل می کند و استقلال کامل عملیات الگوریتم از کد برنامه به دست می آید. در زیر متن TEMPLATE XSL است که برای پردازش نوع سند استفاده می شود.

مقادیر TABREG (از، به، typedoc، body) را وارد کنید (" ", "", "") وارد کالا (invoicenumber، نام، قیمت، کیفیت، کیفیت) (": num"، " ", "", " ")

توضیح مثال فوق، باید توجه داشت که استفاده از جفت برچسب ها و رسمی است، زیرا پس از تجزیه، حداقل یک گره باید در سند XML حاصل شود. روش نتیجه doc.text مقدار متنی به دست آمده در طی تجزیه و تحلیل نتایج XML DocumentDoc را تعیین می کند. در این مورد، ارزش این است که جفت برچسب ها قاب و I.E. ما یک درخواست SQL را تشکیل داده ایم.

یکی دیگر از ویژگی های نوشتن برنامه باید امکان استفاده از پارامتر SQL را ذکر کند : num با استفاده از پارامتر اجازه می دهد تا متن XSL را ساده کنید. تعریف مقدار عناصر مربوطه از گره های سند XML ابتدا تعیین نام گره مربوطه را تعیین می کند، به عنوان مثال:

به طور خلاصه درباره XSL

اختصار XSL از زبان قالب بندی توسعه یافته - جدول قالب بندی جدول سبک (داده های XML) می آید. همانطور که از Header Language Language Extensible (XSL) روشن است (XSL) برای فرمت داده های XML استفاده می شود. با تعریف W3C XSL شامل دو بخش است:

  • XSLT - تغییر XSL. زبان مورد استفاده برای تبدیل یا فرمت (تبدیل) اسناد XML. بنابراین، با استفاده از XSLT، ما می توانیم بخش های مختلفی از فرم های مختلف داده ها و فرم های ارائه داده را دریافت کنیم.
  • عناصر قالب بندی این عناصر شامل تمام عناصر طراحی داده های تایپوگرافی، پس از پردازش آنها با استفاده از XSL پردازش می شوند. فقط برای تشکیل صفحات HTML استفاده می شود.

با استفاده از XSLT، می توانیم داده ها را از فایل XML مورد نیاز خود انتخاب کنیم و آنها را در فرم ترتیب دهیم تا کاربر را ارائه دهیم. به عنوان مثال، در مورد ما، داده های XML را به عنوان یک پرس و جو SQL تبدیل کردیم. برنامه کلاسیک XSL معمولا داده های قالب بندی به عنوان صفحات HTML یا نمایندگی نادر در قالب فایل های RTF است.

فایل XSL Template (الگو) را توصیف می کند، بر اساس آن تبدیل داده XML انجام می شود. بازگشت به قالب های XSL، عناصر زیر را می توان در XSLT (دستورالعمل ها) اختصاص داد:

دستورالعمل XSL شرح
xSL: اعمال قالب دستورالعمل، نشان دهنده استفاده از ویژگی های مناسب قالب select \u003d "name template"
xSL: ویژگی درخت ویژگی را ایجاد می کند و آن را به عنصر خروجی اضافه می کند، نام \u003d "attribute name" پارامتر، فضای نامی - URI در فضای نام (پیشوند نام فضای نام)
xSL: Call-template باعث می شود یک قالب، نام ویژگی \u003d "URI در قالب"
xSL: انتخاب کنید
xSL: زمانی که.
xSL: در غیر این صورت.
ساخت یک انتخاب با شرایط XSL: هنگامی که expr \u003d "محاسبه بیان در اسکریپت"،
زبان \u003d "نام زبان"
تست \u003d "بیان محاسبه شده"
xSL: نظر یک نظر در مورد سند خروجی تولید می کند
xSL: کپی کنید
xSL: کپی-از
گره فعلی را در منبع خروجی کپی می کند و یا قطعه سند را به گره وارد می کند که در آن select \u003d "نام گره منبع" را انتخاب می کند
xSL: عنصر. یک عنصر خروجی را با نام، نام ویژگی \u003d "نام عنصر"، namespace \u003d "uri مرجع به فضای نام" ایجاد می کند
xSL: برای هر کدام دوباره اعمال قالب به تمام گره های لیست گره، ویژگی Attribute را انتخاب کنید لیستی از گره ها.
xSL: اگر. بررسی شرایط توسط ویژگی آزمون به عنوان یک عبارت تنظیم می شود
xSL: شامل شامل یک قالب خارجی، ویژگی href \u003d "مرجع URI"
xSL: خروجی نتیجه خروجی را مشخص می کند، ویژگی روش ممکن است "XML"، "HTML" یا "متن" داشته باشد
xSL: PARAM مقدار پارامتر را مشخص می کند، نام \u003d "نام پارامتر نام"، select \u003d "value"
xSL: آموزش پردازش دستورالعمل ها را برای پردازش، نام ویژگی \u003d "دستورالعمل فرآیند نام" ایجاد می کند
xSL: مرتب سازی بر. انواع گره ها، ویژگی ها را انتخاب کنید \u003d "node name"، نوع داده \u003d نوع داده ("text" | "شماره" | qname)، سفارش \u003d جهت مرتب سازی ("صعودی" | "نزولی")
xSL: شیوه ای سند Template XSL را تعریف می کند، عنصر ریشه برای XSLT است
xSL: الگو قالب XSL را مشخص می کند، نام \u003d "attrifix prefix URI به نام الگو"، match \u003d "توجه داشته باشید به گره که الگو اعمال می شود"
xSL: متن ایجاد متن به جریان خروجی، غیر فعال کردن خروجی-خروجی-فرار \u003d "بله" یا "نه" ویژگی نشان می دهد توانایی تولید شخصیت های ESC
xSL: ارزش ارزش گره انتخاب شده را به عنوان متن، انتخاب \u003d "اشارهگر به گره" مشخص می کند که از آن مقدار گرفته شده است
xSL: متغیر مقدار مرزهای متغیر را مشخص می کند، نام attribute \u003d "نام متغیر"، select \u003d "محاسبه مقدار متغیر"
xSL: با پارامتر پارامتر را به الگو اعمال می کند، نام Attribute \u003d "نام پارامتر"، Select \u003d Expression برای محاسبه زمینه فعلی، مقدار پیش فرض "."

نتیجه

در نتیجه، لازم به ذکر است که استفاده از تجزیه کننده استاندارد XML msxml.dllاین تنها ابزار تجزیه و ایجاد اسناد XML نیست. به عنوان مثال، برای ایجاد اسناد XML به طور موثر از اجزای استفاده کنید tpageProduserو ttableproduser. اما این مقاله تنها بر گستره و امکان استفاده از یک مدل DOM در عمل تاکید دارد.

نویسنده برای بازخورد مربوط به رابطه موضوع، محتوای کلی، سبک ارائه، و همچنین تمام نظرات دیگر که به بهبود کیفیت نوشتن مجموعه ای از مقالات و انتشار کتاب هایی که پوشش می دهد، بسیار سپاسگزار خواهند بود موضوع عملی عملی استفاده از اسناد XML در تجارت الکترونیک. برای کسب اطلاعات بیشتر در مورد کاربرد کاربردی استفاده از اسناد الکترونیکی، می توانید از www.edocs.al.ru در وب سایت نویسنده یاد بگیرید، همچنین برنامه های متون و نمونه های منبع را برنامه ریزی کرده اید.

بسیاری از برنامه نویسان دلفی، صرفه جویی در تنظیمات مرتبط هستند ini فایل ها در برنامه های خود. استفاده از این روش، در پروژه های کمتر جدی، لازم است از آن جلوگیری شود، زیرا انعطاف پذیری آن را محدود می کند، که مانع گسترش بیشتر برنامه می شود. لازم به ذکر است که به دلیل سهولت استفاده و حضور وجوه داخلی در محیط توسعه، چنین رویکردی بسیار محبوب است.

با این حال، گزینه ایده آل برای ذخیره سازی تنظیمات برنامه ساختار یافته است XML فایل ها. مزیت آنها این است که تعداد پارامترها ممکن است ثابت نشوند. برای درک بهتر این، یک مثال خاص را در نظر بگیرید.

در برنامه تحقیق، هنگامی که روی ضبط کلیک میکنید، منوی زمینه به نظر می رسد، که لیست نقاط را نمایش می دهد. این موارد دستورات است که به نوبه خود از فایل تنظیمات دانلود می شود. در صورتی که تنظیمات در آن ذخیره شود ini فایل، این برنامه می تواند یک تعداد معینی از دستورات را ذخیره و بارگذاری کند، به عنوان مثال 10 یا 50. به محض اینکه شما نیاز به اهمیت بیشتری دارید، باید کد را بازنویسی کنید و به همین ترتیب آن را مجددا کامپایل کنید.


استفاده از رویکرد با استفاده از XML فایل ها، ما توانایی دانلود تمام پارامترهای بخش به صورت پویا را داریم. برای این همه، فایل پیکربندی ظریف تر می شود، بدون تعداد بیش از حد پارامترها. با این حال، ابزار استاندارد برای کار با XML دلفی دارای اشکالاتی است، بنابراین من توصیه می کنم با استفاده از کتابخانه استاندارد msxml. معمولا بخشی پیش فرض سیستم های خانوادگی ویندوز است.


برای اتصال msxmlما باید یک فایل رابط را با لیستی از تمام توابع با وارد کردن آن از سرور COM تشکیل دهیم. نحوه وارد کردن رابط، مقاله های دقیق به اندازه کافی نوشته نشده است، من پیشنهاد می کنم فایل را دانلود کنید msxml2_tlb.pas. در حال حاضر آماده استفاده است. پس از دانلود فایل، آن را در کنار پروژه خود قرار دهید یا به پوشه Delphi Lib Lib بروید. بنابراین، تمام برنامه های ایجاد شده قادر به استفاده از ماژول خواهند بود. msxml، به اندازه کافی برای اضافه کردن msxml2_tlb به استفاده می شود.

برای وضوح، مثال زیر از کاربرد این کتابخانه را در نظر بگیرید:

روش loaddata؛ var xmldoc: domdocument؛ ریشه: ixmldomelement؛ شروع xmldoc: \u003d codomdocument.create؛ xmldoc.load ("settins.xml")؛ ریشه: \u003d xmldoc.documentelement؛ ShowMessage ("اندازه / عرض"). متن)؛ ریشه: \u003d صفر؛ xmldoc: \u003d nil؛ پایان؛

اول، یک نمونه از کلاس DomDocument ایجاد شده است، پس از آن محتویات فایل settings.xml به حافظه بارگذاری می شود. به عنوان طبق استاندارد هر XML فایل باید حاوی برچسب ریشه باشد (در این مورد پیکربندی)، ما باید آن را با استفاده از تابع دریافت کنیم مستند سازی. سپس محتویات محتوای بین برچسب ها که به نوبه خود بین برچسب ها است . بنابراین، از فایل settings.xml، روش ما متن را در پیامبازی قرار می دهد "100px".

500px 100px

در اینجا روش SelectSingLende اعمال می شود، که رشته را به عنوان یک پارامتر می گیرد.

سفارش دادن وظایف حل شده در دلفی
دلفی دومین زبان برنامه نویسی است که دانش آموزان اغلب در فرآیند یادگیری آشنا می شوند. این آغاز یادگیری برنامه نویسی شی گرا است. من، به عنوان یک دانش آموز، به این نتیجه رسیدم که هیچ روش ساده تر برای کارشناسی ارشد زبان وجود ندارد تا یک ماشین حساب را روی آن بنویسید. حتی اگر عملکرد ابتدایی علاوه بر دو عدد را درک کنید، این در حال حاضر در نور زیادی است.

CodeGaear، Delphi 7، لازاروس کامپایلر های مختلفی است، برنامه هایی که به کد ماشین نوشته شده توسط شما منتقل می شوند، آن را به Zoliki تبدیل می کنند. این همه برنامه ها برای ایجاد برنامه ها و نه زبان های برنامه نویسی جدا نیست. این کامپایلرها از زبان برنامه نویسی پاسکال استفاده می کنند که زبان دلفی را شامل می شود، که شبیه نحوی شبیه به پاسکال معمولی است، اما به طور قابل توجهی متفاوت عمل می کند.

نحو زبان برنامه نویسی چیست؟

این یک فرمت برای نوشتن اپراتورهای مختلف است. به عنوان مثال، چرخه "برای" در پاسکال دارای فرمت زیر است: "برای n: \u003d 1 به k انجام، و غیره

در زبان برنامه نویسی C ++، همان چرخه تا حدودی متفاوت نوشته شده است: برای (n \u003d 1؛ n ما یک ماشین حساب بنویسیم

این به شما می دهد تا بدانید که چگونه اشیاء با کد برنامه تعامل دارند، چه متغیرها چیست، چگونه توابع ریاضی کار می کنند. تمام برنامه نویسی در هر صورت محاسبه خواهد شد. این بازی همچنین یک برنامه است که به طور مداوم چیزی را در نظر می گیرد، با اعداد و توابع عددی کار می کند. برنامه نویسی از ریاضیات جدا نیست.

ما برای نوشتن محیط توسعه لازاروس استفاده می کنیم. عملکرد آن به عنوان غنی نیست، به عنوان مثال، Codegear، اما دسترسی آزاد است و برای مطالعه طراحی شده است.

باز کردن محیط توسعه، شکل و پانل عناصر را می بینیم. در اینجا یک فرم است

در اینجا پانل عنصر است.

اولین کاری که ما انجام خواهیم داد این است که سه مورد را که نیاز به اجرای تابع اضافه شده از دو عدد اضافه کنید اضافه کنید. ما نیاز داریم: "تدیت" در تعداد سه قطعه و "Tbutton". در تصویر زیر، آنها در پانل فلش نشان داده شده است. بر روی آنها یک بار کلیک کنید، و سپس یک بار در شکل، و آنها بر روی آن ظاهر می شود.

این زمینه های متنی برای ورودی و یک دکمه منظم است. شما این عناصر را با استفاده از تقریبا هر برنامه ویندوز مواجه می کنید. نگاهی بیاندازید.


اکنون این کتیبه ها را تمیز کنید. روی برگه مشاهده کلیک کنید. و بر روی "بازرس اشیاء" کلیک کنید. این پنجره ظاهر خواهد شد.

یکبار روی عنصر ما "دکمه" را روی فرم کلیک کنید و مقدار "عنوان" را در پنجره بازرس به هر چیز دیگری تغییر دهید. به عنوان مثال، در کلمه "OK". روی Enter کلیک کنید ما در فرم می بینیم، زیرا عنصر نام را تغییر داده است.

فقط آن را با ویرایش انجام دهید، فقط تغییر نام ندهید، اما ما آنها را بدون هیچ گونه محتوایی انجام خواهیم داد. ما آنها را به نوبه خود برجسته می کنیم و مقدار متن را در بازرس تمیز می کنیم. فراموش نکنید که ENTER را فشار دهید.

با توجه به نتیجه، فرم ما به نظر می رسد این.


حالا که ماشین حساب ما به دست آورد، شما باید کد نرم افزاری لازم را برای روش دکمه ما ثبت کنید. روی دکمه دکمه دوبار کلیک کنید و ویرایشگر منبع را باز کنید.

دیدن؟ دکمه 1CLICK این یک روش است که مسئول آنچه اتفاق می افتد زمانی که ما بر روی دکمه یک بار کلیک می کنیم. و موارد زیر باید رخ دهد: برنامه در ویرایش سوم مورد نیاز است تا مبلغ اعداد را که در دو فیلد اول معرفی شده است، به ما بدهد. ما کد را بنویسیم

چنین 5 خط ساده از کد ما نیاز به نوشتن. نظرات و توضیحات در تصویر بالا قابل مشاهده است. پس از آن، روی این دکمه کلیک کنید.

مجموعه ای از پروژه ما کامپایل خواهد شد. این در برنامه مونتاژ خواهد شد. ما اعداد را در دو فیلد اول وارد می کنیم، روی دکمه کلیک کنید و مقدار مقدار را دریافت کنید.

نتیجه

شما می توانید بر روی دکمه "فایل" کلیک کنید، سپس "ذخیره کردن همه چیز"، پوشه را انتخاب کنید و یک برنامه کامل را انتخاب کنید، شروع آن را می توانید از دسکتاپ انجام دهید. در حال حاضر سعی کنید آن را به خودتان بفهمید که باید در این کد بازنویسی کنید تا برنامه باید توسط دو عدد تقسیم شود و نه بسته بندی نشده است. نکته: شما باید نوع داده را تغییر دهید. ویدئو زیر یک مثال مشابه را نشان می دهد، اما در دلفی 7، نه لازاروس.

خوش آمدی! این وبلاگ به اینترنت و رایانه اختصاص داده شده است، و دقیق تر، آنها به آنها اختصاص داده شده است.

احتمالا بلافاصله دیده می شود که سالها سالها در این سایت به نظر نمی رسد. بله، این سرنوشت اکثر وبلاگ ها است. هنگامی که این پروژه یک تعهد بلندپروازانه بود، و نویسنده، همانطور که در بسیاری دیگر که در آن زمان نوشت، طرح های گسترده ای برای تبدیل شدن به یکی از بهترین وبلاگ نویسان روسی بود. خوب، اگر شما در حال حاضر نگاه کنید، پس از آن وبلاگ هایی که به طور همزمان با من ساخته شده اند، اکثر آنها در ابدیت حل شده اند. و من به تازگی از دست رفته وبلاگ زمان شد. بنابراین بله، دیگر به روز نمی شود. اگر چه من یک بار در این سایت در رقابت های وبلاگ سال 2011 برنده شدم.

من حتی این ایده را برای حذف این همه، اما پس از آن من مواد قدیمی را اصلاح کردم، و متوجه شدم که آنها هنوز هم می توانند برای خوانندگان مفید باشند. بله، برخی از مقالات منسوخ شده اند (اگر من قدرت کافی داشته باشم، علامت های مناسب را دریافت می کنند)، اما سایت، به عنوان مثال، می تواند برای مبتدیان مفید باشد - در اینجا شما می توانید در مورد مفاهیم اساسی اینترنت بخوانید، یاد بگیرید که سفارشی کنید اینترنت، ویندوز یا حتی تصمیم به رفتن به لینوکس. بنابراین به عنوان ها نگاه کنید و یکی را انتخاب کنید که برای شما مناسب است.

و بعد از همه، امیدوارم این بیش از یک وبلاگ باشد، اما یک راهنمای واقعی اینترنت است. این سایت را می توان در حالت دایرکتوری یافت، که در آن تمام مقالات موجود توسط دسته ها ساختار یافته است. و چه کسی می داند شاید مقالات با کیفیت جدید شروع به نمایش در اینجا.

ساندر

Picodi.ru یک پورتال تخفیف از کوپن های بین المللی، متخصص لهستانی در صرفه جویی و خرید ارزان است. قطب ها یکی از ملت های اقتصادی ترین در جهان محسوب می شوند، بنابراین تعجب آور نیست که این نوع پروژه از راه اندازی لهستانی Kodyrabatowe.pl رشد کرده است. چه چیزی می تواند برای این پورتال به یک کاربر اینترنت معمولی در روسیه مفید باشد؟

تلفن های مدرن آندروید بیش از گوشی هستند. شما به مجموعه ای از برنامه های نصب شده، به تاریخ تماس های شما و پیام های متنی، مجموعه عکس ها و بسیاری استفاده می کنید. اما زمان می رود، و دستگاه به طور کامل مرتب شده شروع به کاهش سرعت، اشکال، و یا به سادگی یک نمایش قابل ارائه را به دلیل تراشه بر روی مورد یا خراش بر روی صفحه نمایش از دست می دهد. یک سوال از انتخاب یک تلفن جدید و تغییر گوشی آندروید وجود دارد. و اگر سوال انتخاب، ما اکنون حزب را از بین ببریم، پس از آن "حرکت" به یک تلفن جدید باقی می ماند یک مشکل جدی - من کاملا نمی خواهم تمام اطلاعات را از ابتدا شروع کنم. در اینجا ما در مورد این امروز صحبت خواهیم کرد.

اکثر خوانندگان این وبلاگ، به احتمال زیاد، هرگز با نسخه های کنترل نسخه مواجه نیستند و در آینده ای نزدیک نخواهند بود. و متاسفم. این اختراع بسیار کاربر پسند به طور گسترده ای توسط برنامه نویسان مورد استفاده قرار می گیرد، اما به نظر من، می تواند بسیار مفید باشد و به کسانی که به طور فعال با متون کار می کنند. اما، احتمالا، هیچ سیستم کنترل نسخه وجود ندارد، که آسان خواهد بود شروع به استفاده از "دفتر" (مایکروسافت آفیس) کار. با این وجود، من فکر می کنم که مواد موجود در مقاله ممکن است برای همه خوانندگان جالب باشد.

اگر شما در مورد چگونگی تماشای فیلم تلویزیونی خود در شبکه و دسترسی به اینترنت فکر کردید، این مقاله برای شماست. نه، من می دانم که برخی از تلویزیون ها قابلیت های تلویزیون هوشمند را دارند، اما من هرگز آن را ندیده ام. ظاهرا، بنابراین، گوگل اخیرا یک دستگاه کاملا خیره کننده را نشان داد، بلافاصله با یک احساس به پایان رسید. ما در مورد Media Streamer Chromecast (Chromkast) صحبت می کنیم، نسخه ای کامل و مقرون به صرفه تر از بازیکن مورد علاقه سال گذشته Nexus Q.

Dongle Chromkast، ابعاد که از 2 اینچ تجاوز نمی کند، به پورت تلویزیون HDMI متصل می شود و به شما امکان می دهد از تماشای محتوای وب جریان لذت ببرید. برای کنترل Streamer، می توانید از هر دستگاه (قرص، رایانه های شخصی، گوشی هوشمند) بر اساس پلت فرم عامل iOS، ویندوز، آندروید یا Mac OS استفاده کنید.

این مقاله به دستگاه حافظه سیستم آندروید اختصاص داده شده است، مشکلات که ممکن است ناشی از فقدان آن و نحوه حل آنها باشد. من خودم تا مدت کوتاهی نداشتم که گوشی آندروید من شروع به طور منظم پیام های مربوط به کمبود حافظه را در هنگام تلاش برای ایجاد یک برنامه خاص آغاز کرد. با وجود این که در توضیحات در بازار، باید حدود 16 گیگابایت وجود داشته باشد، برای من بسیار عجیب بود، و همچنین این حجم را با استفاده از یک کارت حافظه اضافی افزایش دادم. با این حال، مشکل این بود، و قبل از اینکه راه حل مناسب را پیدا کنم، مجبور بودم که دسترسی به ریشه یا بازیابی کامل گوشی را به وضعیت کارخانه نیاز داشته باشم، باید کاملا به طور کامل تینکر کنم.

زبان XML به طور فزاینده ای برای ذخیره اطلاعات استفاده می شود، آن را بین برنامه های کاربردی و گره های وب به اشتراک می گذارد. در بسیاری از برنامه های کاربردی، این زبان به عنوان ذخیره سازی اولیه داده ها در دیگران استفاده می شود - برای صادرات و وارد کردن داده های XML. از این به دنبال آن است که زمان آن است که توسعه دهندگان در مورد نحوه استفاده از داده های XML در برنامه های خود فکر کنند.

در این مقاله، ما مدل XML Object Object (DOM) و پیاده سازی آن توسط مایکروسافت - مایکروسافت XML DOM را در نظر خواهیم گرفت.

XML DOM یک مدل شی است که اشیاء توسعه دهنده را برای دانلود و پردازش فایل های XML فراهم می کند. مدل شیء شامل اشیاء اصلی زیر است: XMLDOMDocument، XMLDOMNODELIST، XMLDOMNODELIST، XMLDOMNAMEDNOMAP و XMLDomPARSEErrorError. هر یک از این اشیاء (به جز XMLDomParseError) شامل خواص و روش ها برای به دست آوردن اطلاعات در مورد شی، دستکاری مقادیر و ساختار جسم، و همچنین حرکت در امتداد ساختار سند XML است.

اشیاء اصلی XML DOM را در نظر بگیرید و چند نمونه از استفاده از آنها را در Borland Delphi ارائه دهید.

با استفاده از XML DOM در Borland Delphi

به منظور استفاده از مایکروسافت XML DOM در برنامه های دلفی، شما باید کتابخانه نوع مناسب را به پروژه وصل کنید. برای انجام این کار، ما پروژه را اجرا می کنیم کتابخانه نوع واردات و در پانل محاوره کتابخانه نوع واردات، کتابخانه مایکروسافت XML نسخه 2.0 (نسخه 2.0) را انتخاب کنید، که معمولا در فایل ویندوز \\ system \\ msxml.dll قرار دارد

پس از فشار دادن دکمه ایجاد واحد، ماژول رابط MSXML_TLB ایجاد می شود، که به ما اجازه می دهد از اشیاء XML DOM استفاده کنیم: DomDocument، XMLDocument، XMLHttPrequest و تعدادی از دیگران که در کتابخانه msxml.dll اجرا شده اند. لینک به ماژول MSXML_TLB باید در لیست استفاده شود.

XML دستگاه DOM

مدل شیء سند نشان دهنده یک سند XML به شکل یک ساختار درختی است که شامل شاخه ها می شود. رابط های نرم افزاری XML DOM اجازه می دهد تا برنامه های کاربردی را برای حرکت به درخت سند و دستکاری شاخه های خود را. هر شاخه می تواند نوع خاصی داشته باشد (Domnodetype)، بر اساس آن والدین و شرکت های تابعه تعیین می شود. در اکثر اسناد XML، شما می توانید شاخه های عنصر، ویژگی ها و شاخه های متن را پیدا کنید. ویژگی ها (ویژگی) نوع خاصی از شاخه هستند و شاخه های فرعی نیستند. برای مدیریت ویژگی، روش های خاص ارائه شده توسط اشیاء XML DOM استفاده می شود.

علاوه بر اجرای رابط های توصیه شده در جهان جهانی وب (W3C)، مایکروسافت XML DOM شامل روشهایی است که از XSL، الگوهای XSL، فضاهای فضایی و انواع داده ها پشتیبانی می کند. به عنوان مثال، روش SelectNodes به شما امکان می دهد از XSL Templates Syntax (Syntax الگوی XSL XSL) برای جستجوی شاخه ها در یک زمینه خاص استفاده کنید و روش TransformNode از استفاده از XSL برای انجام تحولات پشتیبانی می کند.

تست سند XML

به عنوان نمونه ای از یک سند XML، کاتالوگ CD-ROM موسیقی را انتخاب کنید، که دارای ساختار زیر است:

Empire Burlesque باب دیلن ایالات متحده آمریکا. کلمبیا 10.90 1985 قلب خود را پنهان کن bonnie tylor. انگلستان. سوابق CBS 9.90 1988 ... قلبم را رها کن. جو کوکر ایالات متحده آمریکا. الی 8.20 1987

در حال حاضر ما آماده هستیم تا با توجه به مدل شیء XML DOM، آشنایی با آن با شیء XMLDOMDocument شروع کنیم.

سند XML - XMLDOMDocument Object

کار با سند XML با دانلود آن آغاز می شود. برای انجام این کار، از روش بار استفاده می کنیم که تنها یک پارامتر را نشان می دهد که URL سند دانلود شده را نشان می دهد. هنگام دانلود فایل ها از یک دیسک محلی، فقط نام فایل کامل مشخص شده است (فایل: /// پروتکل در این مورد می تواند حذف شود). اگر سند XML به عنوان یک رشته ذخیره شود، باید از روش loadXML استفاده شود تا چنین سند را دانلود کند.

برای کنترل روش دانلود یک سند (همگام یا ناهمگام)، اموال ASYNC استفاده می شود. به طور پیش فرض، این ویژگی درست است، نشان می دهد که سند بارگیری شده به صورت یکنواخت و کنترل به برنامه بازگردانده می شود، حتی تا زمانی که سند به طور کامل بارگذاری شود. در غیر این صورت، سند همزمان شده است، و سپس شما باید ارزش اموال ReadyState را بررسی کنید تا متوجه شوید، سند بارگذاری شده یا نه. شما همچنین می توانید یک Handler رویداد OnreadyStateChange ایجاد کنید که هنگام تغییر ارزش اموال Readystate کنترل را دریافت خواهید کرد.

در زیر نشان داده شده است چگونه برای دانلود سند XML با استفاده از روش بار:

کاربران ... msxml_tlb ... روش tform1.button1click (فرستنده: togject)؛ var xmldoc: ixmldomocument؛ شروع xmldoc: \u003d codomdocument.create؛ xmldoc.async: \u003d اشتباه؛ xmldoc.load ('c: \\ data \\ data.xml')؛ // // در اینجا کد است که Manipulates // سند XML و شاخه های آن // xmldoc: \u003d nil؛ پایان؛

پس از بارگذاری سند، می توانیم به خواص آن اشاره کنیم. بنابراین، اموال Nodename شامل ارزش #document، اموال Nodetypestring یک مقدار سند است، اموال URL فایل: /// C: /DATA/DATA.XML مقدار.

پردازش اشتباه است

از علاقه خاص، خواص مرتبط با پردازش سند زمانی که بارگذاری می شود. بنابراین، Property ParseError یک شی XMLDomParSerororororor را که حاوی اطلاعات خطا است که در طی فرآیند پردازش رخ داده است، باز می گرداند.

برای نوشتن یک handler خطا، می توانید کد زیر را اضافه کنید:

var XMLError: ixmldomparseError؛ ... xmldoc.load ('c: \\ data \\ data.xml')؛ XMLError: \u003d XMLDOC.ParseError؛ اگر XMLError.ErrorCode.<> 0 سپس // // در اینجا ما خطا را پردازش می کنیم // else memo1.lines.add (xmldoc.xml)؛ ... xmldoc: \u003d nil؛

برای پیدا کردن اطلاعاتی که در صورت خطا در مورد اطلاعات بازگشته است، قسمت زیر را تغییر دهید:

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>حالا کد را بنویسید که خواص Xmldomparseororororor را بازگرداند:</p><p>XMLError: \u003d XMLDOC.ParseError؛ اگر XMLError.ErrorCode.<> 0 سپس با XMLError، Memo1.lines شروع به اضافه کردن ('فایل:' + URL)؛ اضافه کردن ('کد:' + inttostr (ERRORCODE))؛ اضافه کردن ('خطا:' + دلیل)؛ اضافه کردن ('متن:' + srctext)؛ اضافه کردن ('ردیف:' + inttostr (خط))؛ اضافه کردن ('موقعیت:' + inttostr (linspos))؛ ENT ELTER MEMO1.LINES.ADD (XMLDOC.XML)؛ پایان؛</p><p>و درخواست ما را انجام دهید. به عنوان یک نتیجه، ما اطلاعات خطای زیر را به دست می آوریم.</p> <p>همانطور که از مثال فوق دیده می شود، اطلاعاتی که توسط Object 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>برای دسترسی به درخت سند، شما می توانید عنصر ریشه را دریافت کنید و سپس از طریق شرکت های تابعه خود، یا برخی شاخه های خاص را پیدا کنید. در اولین مورد، ما عنصر ریشه را از طریق اموال مستندسازی دریافت می کنیم، که یک شی از نوع XMLDOMNOMNODE را باز می کند. در زیر نشان داده شده است که چگونه از اموال مستند سازی استفاده کنید تا محتویات هر عنصر کودک را بدست آورید:</p><p>var node: ixmldomnode؛ ریشه: ixmldomelement؛ من: عدد صحیح؛ ... ریشه: \u003d xmldoc.documentelement؛ برای من: \u003d 0 به root.childnodes.length-1 شروع گره: \u003d root.childnodes.item [i]؛ memo1.lines.add (node.text)؛ پایان؛</p><p>برای سند XML ما، متن زیر را دریافت می کنیم.</p> <p>اگر ما علاقه مند به نوعی شاخه یا شاخه خاصی در زیر اولین شرکت تابعه هستیم، می توانیم از روش nodefromid یا روش GetElementbytagname از شی XMLDOMDocument استفاده کنیم.</p> <p>روش nodefromid نیاز به مشخص کردن یک شناسه منحصر به فرد تعریف شده در طرح XML یا تعریف نوع سند (DTD) دارد و یک شاخه را با این شناسه باز می کند.</p> <p>روش GetElementByTagname نیاز به نشان دادن یک رشته با یک عنصر خاص (برچسب) دارد و تمام شاخه ها را با این مورد باز می گرداند. در زیر نشان داده شده است که چگونه از این روش برای پیدا کردن تمام هنرمندان در دایرکتوری CD-ROM ما استفاده کنید:</p><p>گره ها: ixmldomnodelist؛ گره: ixmldomnode؛ ... گره ها: \u003d xmldoc.getElementsbytagname ('هنرمند')؛ برای من: \u003d 0 به nodes.length-1 شروع گره: \u003d nodes.Item [i]؛ memo1.lines.add (node.text)؛ پایان؛</p><p>برای سند XML ما، متن زیر را دریافت خواهیم کرد.</p> <p>توجه داشته باشید که روش انتخاب XMLDOMNode به روش انعطاف پذیر تر برای دسترسی به شاخه های سند ارائه می دهد. اما در مورد آن کمی پایین تر است.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2> شعبه سند - Xmldomnode شی</h2> <p>شی XMLDOMNODE یک شاخه سند است. ما در حال حاضر با این شیء مواجه شده ایم، زمانی که عنصر ریشه سند به دست آمد:</p><p>ریشه: \u003d xmldoc.documentelement؛</p><p>برای به دست آوردن اطلاعات در شاخه سند XML، می توانید از خواص شی XMLDomNode استفاده کنید (جدول 1).</p> <p>برای دسترسی به داده های ذخیره شده در شاخه، معمولا از ملک NodeValue (در دسترس برای ویژگی ها، شاخه های متن، نظرات، دستورالعمل های پردازش و بخش های CDATA) یا ویژگی های متن که محتوای متن شاخه یا ملک NodetypedValue را باز می گرداند، استفاده کنید. دومی، با این حال، تنها می تواند برای شاخه های با عناصر تایپ شده استفاده شود.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3> حرکت در درخت سند</h3> <p>شی XMLDOMNode راه های مختلفی را برای حرکت از طریق درخت سند فراهم می کند. به عنوان مثال، برای دسترسی به شعبه والدین، اموال Parentnode استفاده می شود، دسترسی به شاخه های کودک از طریق خواص Childnodes (XMLDChild نوع)، firstchild و lastchild (نوع xmldomnode) و غیره انجام می شود. املاک مالکیتی یک شی XMLDocument را که سند XML را شناسایی می کند، باز می کند. خواص فوق باعث می شود که از طریق درخت سند حرکت کند.</p> <p>حالا من تمام شاخه های سند XML را برطرف خواهم کرد:</p><p>ریشه: \u003d xmldoc.documentelement؛ برای من: \u003d 0 به root.childnodes.length-1 شروع گره: \u003d root.childnodes.item [i]؛ اگر node.haschildnodes سپس getchilds (گره، 0)؛ پایان؛</p><p>همانطور که در بالا ذکر شد، شی انتخاب شده XMLDomNode یک راه انعطاف پذیر تر برای دسترسی به شاخه های سند را فراهم می کند. علاوه بر این، یک روش SelectSingLende وجود دارد که تنها شاخه اول سند را باز می کند. هر دو این روش ها به شما این امکان را می دهد که قالب های XSL را برای جستجوی شاخه ها مشخص کنید.</p> <p>فرآیند استفاده از روش انتخابی را در نظر بگیرید تا تمام شاخه هایی را که دارای شاخه و تورم هستند، استخراج کنید.</p><p>ریشه: \u003d xmldoc.documentelement؛ گره ها: \u003d root.selectnodes ('cd / price')؛</p><p>مجموعه گره ها تمام شاخه های CD قیمت Switter قرار می گیرند. بحث در مورد الگوهای 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: ixmldomocument؛ ریشه: ixmldomnode؛ گره: ixmldomnode؛ xmldoc: \u003d codomdocument.create؛ xmldoc.async: \u003d اشتباه؛ xmldoc.load ('c: \\ data \\ data.xml')؛ // ریشه عنصر ریشه: \u003d xmldoc.documentelement؛ گره: \u003d ریشه؛ // حذف اولین شرکت فرعی node.removechild (node.firstchild)؛</p><p>لطفا توجه داشته باشید که در این مثال ما اولین شرکت تابعه را حذف می کنیم. نحوه حذف اولین عنصر اول شرکت تابعه، در زیر نشان داده شده است:</p><p>var xmldoc: ixmldomocument؛ ریشه: ixmldomnode؛ گره: ixmldomnode؛ xmldoc: \u003d codomdocument.create؛ xmldoc.async: \u003d اشتباه؛ xmldoc.load ('c: \\ data \\ data.xml')؛ // ریشه عنصر ریشه: \u003d xmldoc.documentelement؛ // و اولین گره فرعی: \u003d root.firstchild؛ // حذف اولین شرکت فرعی node.removechild (node.firstchild)؛</p><p>در مثال بالا، ما شاخه اول را حذف نکردیم. <CD>…</CD>، و اولین عنصر شاخه - <TITLE>….

در حال حاضر یک شاخه جدید اضافه کنید در زیر یک کد نشان می دهد که چگونه یک رکورد جدید از موسیقی CD-ROM را اضافه کنید:

var newnode: ixmldomnode؛ کودک: ixmldomnode؛ ... // ایجاد یک شاخه جدید - newnode: \u003d xmldoc.createnode (1، 'cd'، '')؛ // اضافه کردن عنصر کودک: \u003d xmldoc.createnode (1، عنوان "، '')؛ // اضافه کردن یک عنصر newnode.appendchild (کودک)؛ // و ارزش آن را از child.Text تنظیم کنید. Text: \u003d 'Pink Floyd'؛ // اضافه کردن عنصر <ARTIST> کودک: \u003d xmldoc.createnode (1، هنرمند "، '')؛ // اضافه کردن یک عنصر newnode.appendchild (کودک)؛ // و ارزش آن را از Child.Text: \u003d 'Division Bell'؛ // اضافه کردن عنصر <COUNTRY> کودک: \u003d xmldoc.createnode (1، "کشور"، '')؛ // اضافه کردن یک عنصر newnode.appendchild (کودک)؛ // و ارزش آن را از child.Text تنظیم کنید. Text: \u003d 'UK'؛ // اضافه کردن عنصر <COMPANY> کودک: \u003d xmldoc.createnode (1، 'شرکت'، '' ')؛ // اضافه کردن یک عنصر newnode.appendchild (کودک)؛ // و مقدار آن را تعیین کنید. Text: \u003d 'emi Records Ltd.؛ // اضافه کردن عنصر <PRICE>کودک: \u003d xmldoc.createnode (1، 'قیمت'، '')؛ // اضافه کردن یک عنصر newnode.appendchild (کودک)؛ // و ارزش آن را از Child.Text ایجاد کنید: \u003d '11 .99 "؛ // اضافه کردن یک عنصر <YEAR> کودک: \u003d xmldoc.createnode (1، 'سال'، '')؛ // اضافه کردن یک عنصر newnode.appendchild (کودک)؛ // و ارزش آن را از کودک تعیین کنید. Text: \u003d '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 شامل لیستی از شاخه هایی است که می تواند با استفاده از روش های انتخابی یا GetElementsbyTagname ساخته شود و همچنین از ویژگی Childnodes به دست آمده است.</p> <p>ما قبلا استفاده از این شی را در مثال داده شده در بخش "حرکت در درخت سند" در نظر گرفته ایم. در اینجا ما همچنین برخی نظرات نظری را ارائه می دهیم.</p> <p>تعداد شاخه ها در لیست را می توان به عنوان ارزش اموال طول به دست آورد. شاخه ها دارای شاخص های 0 تا طول 1 هستند و هر شاخه فردی از طریق یک عنصر آرایه آیتم با شاخص مربوطه در دسترس است.</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: ixmldomocument؛ ریشه: ixmldomnode؛ گره: ixmldomnode؛ S: ابریشمی؛ ... s: \u003d ' <CATALOG></CATALOG>'؛ xmldoc: \u003d codomdocument.create؛ xmldoc.async: \u003d اشتباه؛ xmldoc.loadxml (s)؛ ریشه: \u003d xmldoc.documentelement؛ گره: \u003d xmldoc.createnode (1، 'سی دی'، '')؛ root.appendchild (گره)؛ memo1.lines.add (xmldoc.xml)؛ ... xmldoc: \u003d nil؛</p><p>پس از ساخت یک سند XML، آن را در فایل با استفاده از روش ذخیره ذخیره کنید. مثلا:</p> <p>xmldoc.save ('c: \\ data \\ newcd.xml')؛</p> <p>علاوه بر صرفه جویی در فایل، روش ذخیره به شما اجازه می دهد تا یک سند XML را در یک شی XMLDOMDocument جدید ذخیره کنید. در این مورد، سند پردازش کامل است و به عنوان یک نتیجه، بررسی ساختار و نحو آن. در زیر نشان داده شده است که چگونه یک سند را در یک شی دیگر ذخیره کنید:</p><p>روش tform1.button2click (فرستنده: togject)؛ var xmldoc2: ixmldomocument؛ شروع xmldoc2: \u003d codomdocument.create؛ xmldoc.save (xmldoc2)؛ memo2.lines.add (xmldoc2.xml)؛ ... xmldoc2: \u003d nil؛ پایان؛</p><p>در نتیجه، ما یادآوری می کنیم که روش ذخیره نیز به شما اجازه می دهد تا یک سند XML را به سایر اشیاء COM که از Istream، IsetStream یا Ipesciststreaminit پشتیبانی می کنند، ذخیره کنید.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2> با استفاده از قالب های XSL</h2> <p>بحث در مورد روش انتخاب شیء XMLDOMNode، ما اشاره کردیم که یک روش انعطاف پذیر تر برای دسترسی به شاخه های سند فراهم می کند. انعطاف پذیری در این واقعیت است که به عنوان یک معیار برای انتخاب شاخه ها، شما می توانید یک قالب XSL را مشخص کنید. چنین قالب هایی یک مکانیزم قدرتمند برای جستجوی اطلاعات در اسناد XML ارائه می دهند. به عنوان مثال، به منظور دریافت لیستی از تمام نام های موسیقی CD-ROM در دایرکتوری ما، شما می توانید پرس و جو زیر را دنبال کنید:</p><p>برای پیدا کردن اینکه آیا دیسک هایی از آن هنرمندان در ایالات متحده آزاد می شوند، درخواست به صورت زیر تشکیل شده است:</p><p>گره ها: \u003d root.selectnodes ('CD / Artist')؛</p><p>در زیر نشان داده شده است که چگونه اولین دیسک را در دایرکتوری پیدا کنید:</p><p>گره ها: \u003d root.selectnodes ('cd / title')؛</p><p>و بالاخره:</p><p>گره ها: \u003d root.selectnodes ('cd / title')؛</p><p>برای پیدا کردن دیسک های باب دیلان، می توانید پرس و جو زیر را انجام دهید:</p><p>گره ها: \u003d root.selectnodes ('CD [$ arst \u003d "bob dylan"] / عنوان')؛</p><p>و برای دریافت لیستی از دیسک های منتشر شده پس از سال 1985، ما پرس و جو زیر را انجام می دهیم:</p><p>گره ها: \u003d root.selectnodes ('cd / title')؛</p><p>بحث دقیق تر از Syntax XSL نیاز به انتشار جداگانه دارد. به خوانندگان فریبنده و تحقیق بیشتر تحقیقات، من تنها یک نمونه کوچک از استفاده احتمالی XSL را ارائه خواهم داد. فرض کنید ما باید دایرکتوری ما را به جدول HTML معمولی تبدیل کنیم. با استفاده از روش های سنتی، ما باید تمام شاخه های درخت را مرتب کنیم و برای هر مورد به دست آمده برای تشکیل برچسب های مربوطه <TD>…</TD>.</p> <p>با استفاده از XSL، ما به سادگی یک قالب (یا جدول سبک) ایجاد می کنیم، که در آن ما نشان می دهیم چه چیزی و نحوه تبدیل آن را نشان می دهیم. سپس ما این الگو را به کاتالوگ ما تحمیل می کنیم و آماده می شویم: قبل از ما متن از قالب XSL، که دایرکتوری را در جدول (فهرست 2) تبدیل می کند.</p> <p>کد برای پوشش دادن قالب XSL به کاتالوگ ما به نظر می رسد این است:</p><p>روش tform1.button2click (فرستنده: togject)؛ var xsldoc: ixmldomocument؛ شروع xsldoc: \u003d codomdocument.create؛ xsldoc.load ('c: \\ data \\ data.xsl')؛ memo2.text: \u003d xmldoc.transformnode (xsldoc)؛ xsldoc: \u003d nil؛ پایان؛</p><p>با تکمیل بحث ما از XSL، باید گفت که در حال حاضر این زبان به طور فعال برای تبدیل بین اسناد XML مختلف، و همچنین برای قالب بندی اسناد استفاده می شود.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2> نتیجه</h2> <p>به دلایل کاملا قابل فهم، در یک مقاله غیر ممکن است که تمام اشیاء XML مایکروسافت XML را در نظر بگیریم و نمونه هایی از استفاده آنها را بیان کنیم. در اینجا ما تنها در مورد مسائل اصلی استفاده از XML DOM در برنامه ها لمس کردیم. در برگه 3 تمام اشیاء اجرا شده در مایکروسافت XML DOM را نشان می دهد.</p> <p>ComputerPress 12 "2000</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> <div class="bsb-wrap bsb-bold bsb-after-post php-mode" data-post-id="4848" data-share-url="/eshhe-odin-nalog-chem-zamenit-nalog-na-modernizatsiyu/"> <div class="bsb-items"> <div class="bsb-item bsb-facebook bsb-no-count" data-id="facebook"> <a href="https://www.facebook.com/sharer.php?u=https%3A%2F%2Fqipu.ru%2Ffa%2Ftele2%2Fkak-v-delphi-sformirovat-xml-fail-putevoditel-po-internetu---vse.html" class="bsb-link" target="_blank" data-wpel-link="internal"> <i class="bsb-icon icon icon-facebook"></i> <span class="bsb-label">اشتراک گذاری.</span> </a> </div> <div class="bsb-item bsb-telegram bsb-no-count" data-id="telegram"> <a href="https://qipu.ru/fa/tg://msg?text=https%3A%2F%2Fqipu.ru%2Ftele2%2Fkak-v-delphi-sformirovat-xml-fail-putevoditel-po-internetu---vse.html" class="bsb-link" target="_blank" data-wpel-link="internal"> <i class="bsb-icon icon icon-telegram"></i> <span class="bsb-label">اشتراک گذاری.</span> </a> </div> <div class="bsb-item bsb-twitter bsb-no-count" data-id="twitter"> <a href="https://twitter.com/share?url=https%3A%2F%2Fqipu.ru%2Ffa%2Ftele2%2Fkak-v-delphi-sformirovat-xml-fail-putevoditel-po-internetu---vse.html" class="bsb-link" target="_blank" data-wpel-link="internal"> <i class="bsb-icon icon icon-twitter"></i> <span class="bsb-label">توییت.</span> </a> </div> <div class="bsb-item bsb-vkontakte bsb-no-count" data-id="vkontakte"> <a href="https://vk.com/share.php?url=https%3A%2F%2Fqipu.ru%2Ftele2%2Fkak-v-delphi-sformirovat-xml-fail-putevoditel-po-internetu---vse.html" class="bsb-link" target="_blank" data-wpel-link="internal"> <i class="bsb-icon icon icon-vkontakte"></i> <span class="bsb-label">پسندیدن.</span> </a> </div> <div class="bsb-item bsb-fb-messenger bsb-no-count" data-id="fb-messenger"> <a href="https://qipu.ru/fa/fb-messenger://share/?link=https%3A%2F%2Fqipu.ru%2Ftele2%2Fkak-v-delphi-sformirovat-xml-fail-putevoditel-po-internetu---vse.html" class="bsb-link" target="_blank" data-wpel-link="internal"> <i class="bsb-icon icon icon-fb-messenger"></i> <span class="bsb-label">پسندیدن.</span> </a> </div> </div> </div> </div> </div> </article> <section class="section-carousel"> <div class="post-carousel"> <h3 class="title-block">همچنین بخوانید</h3> <div class="owl-container owl-loop" data-columns="3" data-padding="20"> <div class="owl-carousel"> <article class="post- post type-post status-publish format-standard has-post-thumbnail hentry category-morning-news"> <div class="post-thumbnail"> <img width="720" height="378" src="/uploads/e559950a8c28c2ecd6250bcdb1ca9b6a.jpg" class="attachment-md size-md wp-post-image" alt="تعیین بار حل و فصل ضریب اتصال شبکه برق شهری ترکیبی از بارهای حداکثر" / loading=lazy loading=lazy> <div class="post-more"><a href="https://qipu.ru/fa/megaphone/opredelenie-raschetnyh-nagruzok-gorodskih-elektricheskih-setei.html" class="btn-link" data-wpel-link="internal"><span>خواندن</span></a></div> <ul class="post-meta"></ul> <a href="https://qipu.ru/fa/megaphone/opredelenie-raschetnyh-nagruzok-gorodskih-elektricheskih-setei.html" data-wpel-link="internal"></a> </div> <h2 class="entry-title"><a href="https://qipu.ru/fa/megaphone/opredelenie-raschetnyh-nagruzok-gorodskih-elektricheskih-setei.html" data-wpel-link="internal">تعیین بار حل و فصل ضریب اتصال شبکه برق شهری ترکیبی از بارهای حداکثر</a></h2> <ul class="post-meta"> <li class="meta-date"> <time class="entry-date published updated" datetime=""> 2021-05-10 18:10:49 </time> </li> </ul> </article> <!-- /next_post --> <article class="post- post type-post status-publish format-standard has-post-thumbnail hentry category-morning-news"> <div class="post-thumbnail"> <img width="720" height="378" src="/uploads/72ec1ff0e6d0b242b4f7b2620ac56169.jpg" class="attachment-md size-md wp-post-image" alt="شبکه های ثانویه شبکه های مخابراتی شبکه های ثانویه" / loading=lazy loading=lazy> <div class="post-more"><a href="https://qipu.ru/fa/tele2/vtorichnye-seti-svyazi-vtorichnaya-set-svyazi-kanalov.html" class="btn-link" data-wpel-link="internal"><span>خواندن</span></a></div> <ul class="post-meta"></ul> <a href="https://qipu.ru/fa/tele2/vtorichnye-seti-svyazi-vtorichnaya-set-svyazi-kanalov.html" data-wpel-link="internal"></a> </div> <h2 class="entry-title"><a href="https://qipu.ru/fa/tele2/vtorichnye-seti-svyazi-vtorichnaya-set-svyazi-kanalov.html" data-wpel-link="internal">شبکه های ثانویه شبکه های مخابراتی شبکه های ثانویه</a></h2> <ul class="post-meta"> <li class="meta-date"> <time class="entry-date published updated" datetime=""> 2021-05-10 18:10:49 </time> </li> </ul> </article> <!-- /next_post --> <article class="post- post type-post status-publish format-standard has-post-thumbnail hentry category-morning-news"> <div class="post-thumbnail"> <img width="720" height="378" src="/uploads/34ce76b240af9af5ab78b6ac754bf912.jpg" class="attachment-md size-md wp-post-image" alt="نصب و راه اندازی سیستم عامل رسمی در سیستم عامل Galaxy S6 سامسونگ Nokia C6 00" / loading=lazy loading=lazy> <div class="post-more"><a href="https://qipu.ru/fa/mobile-tips/ustanovka-oficialnoi-proshivki-na-samsung-galaxy-s6-ustanovka.html" class="btn-link" data-wpel-link="internal"><span>خواندن</span></a></div> <ul class="post-meta"></ul> <a href="https://qipu.ru/fa/mobile-tips/ustanovka-oficialnoi-proshivki-na-samsung-galaxy-s6-ustanovka.html" data-wpel-link="internal"></a> </div> <h2 class="entry-title"><a href="https://qipu.ru/fa/mobile-tips/ustanovka-oficialnoi-proshivki-na-samsung-galaxy-s6-ustanovka.html" data-wpel-link="internal">نصب و راه اندازی سیستم عامل رسمی در سیستم عامل Galaxy S6 سامسونگ Nokia C6 00</a></h2> <ul class="post-meta"> <li class="meta-date"> <time class="entry-date published updated" datetime=""> 2021-05-10 18:10:49 </time> </li> </ul> </article> <!-- /next_post --> </div> <div class="owl-dots"></div> </div> </div> </section> </main> </div> </div> </div> </div> <footer class="site-footer"> <style> .footer-section { width: 830px; margin: 0 auto; padding: 0; font-family: 'Noto Sans', sans-serif; } .site-footer { background-color: #222; } @media (max-width: 1025px) { .footer-section { max-width: 690px; } } @media (max-width: 760px) { .footer-section { width: 90%; } } .site-footer a:hover { color: #FF3400; } .white-a { color: #969696!important; } .white-a:hover { color: #fff!important; } .white-a:hover g { opacity: 1; } </style> <div class="footer-section"> <div class="footer" > <div class="footer__menu"> <div class="footer__menu__logo" style="background:none;"><img src="/logo.png" loading=lazy loading=lazy></div> <ul> <li><a href="https://qipu.ru/fa/category/megaphone/">ممتاز</a></li> <li><a href="https://qipu.ru/fa/category/mts/">منزل</a></li> <li><a href="https://qipu.ru/fa/category/beeline/">بولین</a></li> <li><a href="https://qipu.ru/fa/category/tele2/">تله 2</a></li> </ul> <ul> <li><a href="https://qipu.ru/fa/category/megaphone/">ممتاز</a></li> <li><a href="https://qipu.ru/fa/category/mts/">منزل</a></li> <li><a href="https://qipu.ru/fa/category/beeline/">بولین</a></li> <li><a href="https://qipu.ru/fa/category/tele2/">تله 2</a></li> </ul> </div> <div class="footer__social"> <a href="https://facebook.com/" target="_blank" class="footer__social--facebook white-a" data-wpel-link="external"></a> <a href="https://twitter.com/" target="_blank" class="footer__social--tw white-a" data-wpel-link="external"></a> <a href="" target="_blank" class="footer__social--vk white-a" data-wpel-link="external"></a> <a href="https://youtube.com/" target="_blank" class="footer__social--yt white-a" data-wpel-link="external"></a> </div> <div class="footer__info" > <p>© qipu.ru، 2021. دستیار شخصی در دنیای ارتباطات سلولی <br> .</p> </div> </div> </div> </footer> </div> </div> <a href="https://qipu.ru/fa/#top" class="scroll-to-top hidden-sm-down" data-wpel-link="internal"></a> <div class="site-search" id="search"> <button type="button" class="close"></button> <div class="form-container"> <div class="container"> <div class="row"> <div class="col-lg-6 offset-lg-3"> <form role="search" method="get" class="search-form form" action="/"> <label class="sr-only">جستجو برای:</label> <div class="input-group"> <input type="search" value="" name="s" class="search-field form-control" placeholder="دنبال چی میگردی؟" required> <span class="input-group-btn"> <button type="submit" class="search-submit btn btn-primary btn-effect"><span>جستجو کردن.</span><span><i class="icon icon-search"></i></span></button> </span> </div> </form> <p>کلیدواژه ها را وارد کنید.</p> </div> </div> </div> </div> </div> <style type="text/css"> .wpmchimpa-overlay-bg.wpmchimpselector { display: none; top: 0; left: 0; height:100%; width: 100%; cursor: pointer; z-index: 999999; background: #000; background: rgba(0,0,0,0.40); background:rgba(0,0,0,0.7);cursor: default; position: fixed!important; } .wpmchimpa-overlay-bg #wpmchimpa-main *{ transition: all 0.5s ease; } .wpmchimpa-overlay-bg .wpmchimpa-mainc, .wpmchimpa-overlay-bg .wpmchimpa-maina{ -webkit-transform: translate(0,0); height:100%;} .wpmchimpa-overlay-bg #wpmchimpa-main { position: absolute; top: 50%; left: 50%; border-radius: 2px; -webkit-transform: translate(-50%, -50%); -moz-transform: translate(-50%, -50%); -ms-transform: translate(-50%, -50%); -o-transform: translate(-50%, -50%); transform: translate(-50%, -50%); width: calc(100% - 20px); max-width:650px; background: #27313B; text-align: center; background-color:#ffffff;} #wpmchimpa-main #wpmchimpa-newsletterform{ } #wpmchimpa-main #wpmchimpa{ width: calc(100% - 20px); max-width: 400px; margin: 0 auto; } #wpmchimpa div{ position:relative; } #wpmchimpa h3{ line-height: 24px; margin-top:20px; color: #F4233C; font-size: 24px; font-family:Tahoma, Geneva, sans-serif;font-size:35px;line-height:35px;font-weight:normal;font-style:normal;color:#f34b38;} #wpmchimpa .wpmchimpa_para{ margin-top: 15px; } #wpmchimpa .wpmchimpa_para,#wpmchimpa .wpmchimpa_para * { font-size: 15px; color: #959595; font-family:Tahoma, Geneva, sans-serif;font-size:15px;} #wpmchimpa form{ margin: 20px auto; } #wpmchimpa .formbox > div:first-of-type{ width: 65%; float: left; } #wpmchimpa .formbox > div:first-of-type + div{ width: 35%; float: left; text-align: center; } #wpmchimpa .formbox input[type="text"]{ border-radius: 3px 0 0 3px; } #wpmchimpa .wpmchimpa-field{ position: relative; width:100%; margin: 0 auto 10px auto; text-align: left; } #wpmchimpa .inputicon{ display: none; } #wpmchimpa .wpmc-ficon .inputicon { display: block; width: 40px; height: 40px; position: absolute; top: 0; left: 0; pointer-events: none; } #wpmchimpa .wpmc-ficon input[type="text"], #wpmchimpa .wpmc-ficon input[type="text"] ~ .inputlabel{ padding-left: 40px; } #wpmchimpa .wpmc-ficon [wpmcfield="email"] ~ .inputicon { background: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiMzZDNkM2QiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMTVweCIgaGVpZ2h0PSIxNXB4IiB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgNTEyIDUxMiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBhdGggZD0iTTUxMiwzODRjMCwxMS4yMTktMy4xNTYsMjEuNjI1LTguMjE5LDMwLjc4MUwzNDIuMTI1LDIzMy45MDZMNTAyLjAzMSw5NGM2LjIxOSw5Ljg3NSw5Ljk2OSwyMS40NjksOS45NjksMzRWMzg0eiBNMjU2LDI2Ni43NUw0NzguNSw3Mi4wNjNjLTkuMTI1LTUtMTkuNDA2LTguMDYzLTMwLjUtOC4wNjNINjRjLTExLjEwOSwwLTIxLjM5MSwzLjA2My0zMC40ODQsOC4wNjNMMjU2LDI2Ni43NXogTTMxOC4wMzEsMjU0Ljk2OSBsLTUxLjUsNDUuMDk0QzI2My41MTYsMzAyLjY4OCwyNTkuNzY2LDMwNCwyNTYsMzA0cy03LjUxNi0xLjMxMy0xMC41MzEtMy45MzhsLTUxLjUxNi00NS4wOTRMMzAuMjUsNDM4LjE1NiBDNDAuMDYzLDQ0NC4zMTMsNTEuNTYzLDQ0OCw2NCw0NDhoMzg0YzEyLjQzOCwwLDIzLjkzOC0zLjY4OCwzMy43NS05Ljg0NEwzMTguMDMxLDI1NC45Njl6IE05Ljk2OSw5NEMzLjc1LDEwMy44NzUsMCwxMTUuNDY5LDAsMTI4IHYyNTZjMCwxMS4yMTksMy4xNDEsMjEuNjI1LDguMjE5LDMwLjc4MWwxNjEuNjQxLTE4MC45MDZMOS45NjksOTR6Ii8+PC9zdmc+') no-repeat center} #wpmchimpa .wpmc-ficon [wpmcfield="FNAME"] ~ .inputicon { background: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiMzZDNkM2QiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMTVweCIgaGVpZ2h0PSIxNXB4IiB2aWV3Qm94PSIwIDAgNjEyIDYxMiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgNjEyIDYxMiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PGc+PHBhdGggZD0iTTMwNi4wMDEsMzI1Ljk4OGM5MC41NjMtMC4wMDUsMTIzLjE0Ny05MC42ODIsMTMxLjY3OS0xNjUuMTY3QzQ0OC4xODgsNjkuMDYsNDA0Ljc5OSwwLDMwNi4wMDEsMCBjLTk4Ljc4MiwwLTE0Mi4xOTUsNjkuMDU1LTEzMS42NzksMTYwLjgyQzE4Mi44NjIsMjM1LjMwNCwyMTUuNDM2LDMyNS45OTUsMzA2LjAwMSwzMjUuOTg4eiIvPjxwYXRoIGQ9Ik01NTAuOTgxLDU0MS45MDhjLTAuOTktMjguOTA0LTQuMzc3LTU3LjkzOS05LjQyMS04Ni4zOTNjLTYuMTExLTM0LjQ2OS0xMy44ODktODUuMDAyLTQzLjk4My0xMDcuNDY1IGMtMTcuNDA0LTEyLjk4OC0zOS45NDEtMTcuMjQ5LTU5Ljg2NS0yNS4wODFjLTkuNjk3LTMuODEtMTguMzg0LTcuNTk0LTI2LjUzNy0xMS45MDFjLTI3LjUxOCwzMC4xNzYtNjMuNCw0NS45NjItMTA1LjE4Niw0NS45NjQgYy00MS43NzQsMC03Ny42NTItMTUuNzg2LTEwNS4xNjctNDUuOTY0Yy04LjE1Myw0LjMwOC0xNi44NCw4LjA5My0yNi41MzcsMTEuOTAxYy0xOS45MjQsNy44MzItNDIuNDYxLDEyLjA5Mi01OS44NjMsMjUuMDgxIGMtMzAuMDk2LDIyLjQ2My0zNy44NzMsNzIuOTk2LTQzLjk4MywxMDcuNDY1Yy01LjA0NSwyOC40NTQtOC40MzMsNTcuNDg5LTkuNDIyLDg2LjM5MwljLTAuNzY2LDIyLjM4NywxMC4yODgsMjUuNTI1LDI5LjAxNywzMi4yODRjMjMuNDUzLDguNDU4LDQ3LjY2NiwxNC43MzcsNzIuMDQxLDE5Ljg4NGM0Ny4wNzcsOS45NDEsOTUuNjAzLDE3LjU4MiwxNDMuOTIxLDE3LjkyNCBjNDguMzE4LTAuMzQzLDk2Ljg0NC03Ljk4MywxNDMuOTIxLTE3LjkyNGMyNC4zNzUtNS4xNDUsNDguNTktMTEuNDI0LDcyLjA0MS0xOS44ODQJQzU0MC42OTQsNTY3LjQzNSw1NTEuNzQ3LDU2NC4yOTcsNTUwLjk4MSw1NDEuOTA4eiIvPjwvZz48L3N2Zz4=') no-repeat center} #wpmchimpa .wpmc-ficon [wpmcfield="LNAME"] ~ .inputicon { background: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiMzZDNkM2QiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMTVweCIgaGVpZ2h0PSIxNXB4IiB2aWV3Qm94PSIwIDAgNjEyIDYxMiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgNjEyIDYxMiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PGc+PHBhdGggZD0iTTMwNi4wMDEsMzI1Ljk4OGM5MC41NjMtMC4wMDUsMTIzLjE0Ny05MC42ODIsMTMxLjY3OS0xNjUuMTY3QzQ0OC4xODgsNjkuMDYsNDA0Ljc5OSwwLDMwNi4wMDEsMCBjLTk4Ljc4MiwwLTE0Mi4xOTUsNjkuMDU1LTEzMS42NzksMTYwLjgyQzE4Mi44NjIsMjM1LjMwNCwyMTUuNDM2LDMyNS45OTUsMzA2LjAwMSwzMjUuOTg4eiIvPjxwYXRoIGQ9Ik01NTAuOTgxLDU0MS45MDhjLTAuOTktMjguOTA0LTQuMzc3LTU3LjkzOS05LjQyMS04Ni4zOTNjLTYuMTExLTM0LjQ2OS0xMy44ODktODUuMDAyLTQzLjk4My0xMDcuNDY1IGMtMTcuNDA0LTEyLjk4OC0zOS45NDEtMTcuMjQ5LTU5Ljg2NS0yNS4wODFjLTkuNjk3LTMuODEtMTguMzg0LTcuNTk0LTI2LjUzNy0xMS45MDFjLTI3LjUxOCwzMC4xNzYtNjMuNCw0NS45NjItMTA1LjE4Niw0NS45NjQgYy00MS43NzQsMC03Ny42NTItMTUuNzg2LTEwNS4xNjctNDUuOTY0Yy04LjE1Myw0LjMwOC0xNi44NCw4LjA5My0yNi41MzcsMTEuOTAxYy0xOS45MjQsNy44MzItNDIuNDYxLDEyLjA5Mi01OS44NjMsMjUuMDgxIGMtMzAuMDk2LDIyLjQ2My0zNy44NzMsNzIuOTk2LTQzLjk4MywxMDcuNDY1Yy01LjA0NSwyOC40NTQtOC40MzMsNTcuNDg5LTkuNDIyLDg2LjM5MwljLTAuNzY2LDIyLjM4NywxMC4yODgsMjUuNTI1LDI5LjAxNywzMi4yODRjMjMuNDUzLDguNDU4LDQ3LjY2NiwxNC43MzcsNzIuMDQxLDE5Ljg4NGM0Ny4wNzcsOS45NDEsOTUuNjAzLDE3LjU4MiwxNDMuOTIxLDE3LjkyNCBjNDguMzE4LTAuMzQzLDk2Ljg0NC03Ljk4MywxNDMuOTIxLTE3LjkyNGMyNC4zNzUtNS4xNDUsNDguNTktMTEuNDI0LDcyLjA0MS0xOS44ODQJQzU0MC42OTQsNTY3LjQzNSw1NTEuNzQ3LDU2NC4yOTcsNTUwLjk4MSw1NDEuOTA4eiIvPjwvZz48L3N2Zz4=') no-repeat center} #wpmchimpa .wpmchimpa-field textarea, #wpmchimpa .wpmchimpa-field select, #wpmchimpa input[type="text"]{ text-align: left; width: 100%; height: 40px; border-radius:3px; background: #fff; padding: 0 10px; color: #353535; font-size:17px; outline:0; display: block; border: 1px solid #efefef; font-family:Tahoma, Geneva, sans-serif;font-size:15px;color:#696565;} #wpmchimpa .wpmchimpa-field.wpmchimpa-multidrop select{ height: 100px; } #wpmchimpa .wpmchimpa-field.wpmchimpa-drop:before{ content: ''; width: 40px; height: 40px; position: absolute; right: 0; top: 0; pointer-events: none; background: no-repeat center; background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiMwMDAiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgOTQuODU5IDk0Ljg1OSIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgOTQuODU5IDk0Ljg1OSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBhdGggZD0iTTE3LjMxMiw0MS43NTdoNjAuMjM2YzAuNzcsMCwxLjQ2OS0wLjQ0LDEuODAyLTEuMTMzYzAuMzM0LTAuNjkxLDAuMjQxLTEuNTE0LTAuMjM3LTIuMTE0TDQ4Ljk5NCwwLjc1MyBDNDguNjE0LDAuMjc3LDQ4LjAzOSwwLDQ3LjQzMSwwcy0xLjE4NCwwLjI3Ny0xLjU2MywwLjc1M0wxNS43NDgsMzguNTFjLTAuNDc5LDAuNjAxLTAuNTcyLDEuNDIzLTAuMjM4LDIuMTE0IEMxNS44NDMsNDEuMzE3LDE2LjU0Miw0MS43NTcsMTcuMzEyLDQxLjc1N3oiLz4gPHBhdGggZD0iTTc3LjU0Nyw1My4xMDJIMTcuMzEyYy0wLjc2OSwwLTEuNDY5LDAuNDM5LTEuODAyLDEuMTMzYy0wLjMzNCwwLjY5MS0wLjI0MSwxLjUxNCwwLjIzOCwyLjExM2wzMC4xMTksMzcuNzU4IGMwLjM4LDAuNDc2LDAuOTU1LDAuNzUzLDEuNTYzLDAuNzUzczEuMTg0LTAuMjc3LDEuNTYzLTAuNzUzTDc5LjExLDU2LjM0OGMwLjQ3OS0wLjYwMSwwLjU3MS0xLjQyMiwwLjIzNy0yLjExMyBDNzkuMDE2LDUzLjU0MSw3OC4zMTcsNTMuMTAyLDc3LjU0Nyw1My4xMDJ6Ii8+PC9zdmc+'); } #wpmchimpa input[type="text"] ~ .inputlabel{ position: absolute; top: 0; left: 0; right: 0; pointer-events: none; width: 100%; line-height: 40px; color: rgba(0,0,0,0.6); font-size: 17px; font-weight:500; padding: 0 10px; white-space: nowrap; font-family:Tahoma, Geneva, sans-serif;font-size:15px;color:#696565;} #wpmchimpa input[type="text"]:valid + .inputlabel{ display: none; } #wpmchimpa select.wpmcerror, #wpmchimpa input[type="text"].wpmcerror{ border-color: red; } #wpmchimpa .wpmchimpa-check, #wpmchimpa .wpmchimpa-radio{ clear: both; } #wpmchimpa .wpmchimpa-check *, #wpmchimpa .wpmchimpa-radio *{ color: #fff; font-family:Tahoma, Geneva, sans-serif;font-size:14px;font-weight:normal;font-style:normal;color:#3d3d3d;} #wpmchimpa .wpmchimpa-item{ width:100%; display: inline-block; vertical-align: top; } #wpmchimpa .wpmchimpa-item input { display: none; } #wpmchimpa .wpmchimpa-item span { cursor: pointer; display: inline-block; position: relative; padding-left: 35px; line-height: 20px; margin-right: 10px; } #wpmchimpa .wpmchimpa-item span:before, #wpmchimpa .wpmchimpa-item span:after { content: ''; display: inline-block; width: 12px; height: 12px; left: 0; top: 4px; position: absolute; } #wpmchimpa .wpmchimpa-item span:before { border:1px solid #ccc; border-radius: 1px; background-color: #fff; -webkit-transition: all 0.3s ease-in-out; transition: all 0.3s ease-in-out; border: 1px solid#f34b38;background: #ffffff;} #wpmchimpa .wpmchimpa-item input[type='checkbox'] + span:hover:after, #wpmchimpa input[type='checkbox']:checked + span:after { content:''; width: 14px; height: 14px; background: no-repeat center; background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiMwMDAwMDAiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iOHB4IiBoZWlnaHQ9IjhweCIgdmlld0JveD0iMCAwIDIzMCAyMzAiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDIzMCAyMzAiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGQ9Ik05Mi4zNTYsMjIzLjU0OWM3LjQxLDcuNSwyMy45MTQsNS4wMTQsMjUuNjkxLTYuNzc5YzExLjA1Ni03My4yMTcsNjYuMzc4LTEzNC45ODUsMTA4LjI0My0xOTMuMTg5IEMyMzcuODk4LDcuNDUyLDIxMS4yMDctNy44NywxOTkuNzUsOC4wNjdDMTYxLjQ5Myw2MS4yNDksMTEzLjI3NCwxMTcuMjEsOTQuNDEsMTgxLjc0NCBjLTIxLjU1Ny0yMi4wMzEtNDMuMjAxLTQzLjg1My02Ny4zNzktNjMuMjEyYy0xNS4zMTItMTIuMjY1LTM3LjIxNSw5LjM0My0yMS43MzgsMjEuNzM3IEMzNi43OTQsMTY1LjUwMSw2NC4wMTcsMTk0LjkyNCw5Mi4zNTYsMjIzLjU0OXoiLz48L3N2Zz4='); } #wpmchimpa .wpmchimpa-item input[type='checkbox']:not(:checked) + span:hover:after { opacity: 0.5; } #wpmchimpa .wpmchimpa-item input[type='radio'] + span:before { border-radius: 50%; width: 12px; height: 12px; top: 4px; } #wpmchimpa input[type='radio']:checked + span:after { background: #000000; width: 8px; height: 8px; top: 6px; left: 2px; border-radius: 50%; } #wpmchimpa .wpmcinfierr{ display: block; height: 10px; text-align: left; line-height: 10px; margin-bottom: -10px; font-size: 10px; color: red; pointer-events: none; font-family:Tahoma, Geneva, sans-serif;} #wpmchimpa .wpmchimpa-subs-button{ border-radius: 0 3px 3px 0; width: 100%; color: #fff; font-size: 17px; border: 1px solid #FA0B38; background-color: #FF1F43; height: 40px; line-height: 40px; text-align: center; cursor: pointer; position: relative; top: 0; font-family:Tahoma, Geneva, sans-serif;font-size:16px;font-weight:normal;font-style:normal;color:#ffffff;background-color:#f34b38;} #wpmchimpa .wpmchimpa-subs-button::before{ content: 'Подписаться'; } #wpmchimpa .wpmchimpa-subs-button:hover{ background-color: #FA0B38; color:#ffffff;background-color:#75c462;} #wpmchimpa .wpmchimpa-subs-button.subsicon:before{ padding-left: 40px; } #wpmchimpa .wpmchimpa-subs-button.subsicon::after{ content:''; position: absolute; height: 40px; width: 40px; top: 0; left: 0; pointer-events: none; } .wpmchimpa-overlay-bg.signalshow .wpmchimpa-subs-button::after, .wpmchimpa-overlay-bg.signalshow .wpmchimpa-subs-button::before{ display: none; } #wpmchimpa-main .wpmchimpa-signal { display: none; z-index: 1; top: 5px; left: calc(50% - 20px); position: absolute; -webkit-transform: scale(0.8); -ms-transform: scale(0.8); transform: scale(0.8); } .wpmchimpa-overlay-bg.signalshow #wpmchimpa-main .wpmchimpa-signal { display: inline-block; } #wpmchimpa-main .wpmchimpa-feedback{ text-align: center; position: relative; color: #ccc; font-size: 10px; height: 12px; margin-top: -12px; font-family:Tahoma, Geneva, sans-serif;color:#3d3d3d;} #wpmchimpa-main .wpmchimpa-tag{ margin: 5px auto; } #wpmchimpa-main .wpmchimpa-tag, #wpmchimpa-main .wpmchimpa-tag *{ color:#fff; font-size: 10px; font-family:Tahoma, Geneva, sans-serif;font-size:10px;color:#3d3d3d;} #wpmchimpa-main .wpmchimpa-tag:before{ content:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiMzZDNkM2QiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMTBweCIgaGVpZ2h0PSIxMHB4IiB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgNTEyIDUxMiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBhdGggZD0iTTQxNy41NjYsMjA5LjgzaC05LjQ4NHYtNDQuMzg4YzAtODIuMDk5LTY1LjE1MS0xNTAuNjgxLTE0Ni41ODItMTUyLjE0NWMtMi4yMjQtMC4wNC02LjY3MS0wLjA0LTguODk1LDAgYy04MS40MzIsMS40NjQtMTQ2LjU4Miw3MC4wNDYtMTQ2LjU4MiwxNTIuMTQ1djQ0LjM4OGgtOS40ODVDODEuOTIyLDIwOS44Myw3MCwyMjQuOTEyLDcwLDI0My41Mzl2MjIyLjYzMiAgQzcwLDQ4NC43NzcsODEuOTIyLDUwMCw5Ni41MzksNTAwaDMyMS4wMjhjMTQuNjE3LDAsMjYuNTM5LTE1LjIyMywyNi41MzktMzMuODI5VjI0My41MzkgIEM0NDQuMTA1LDIyNC45MTIsNDMyLjE4NCwyMDkuODMsNDE3LjU2NiwyMDkuODN6IE0yODcuMTI5LDM1NC42Mjl2NjcuMjdjMCw3LjcwNC02LjQ0OSwxNC4yMjItMTQuMTU5LDE0LjIyMmgtMzEuODM0ICBjLTcuNzEsMC0xNC4xNTktNi41MTgtMTQuMTU5LTE0LjIyMnYtNjcuMjdjLTcuNDc3LTcuMzYxLTExLjgzLTE3LjUzNy0xMS44My0yOC43OTVjMC0yMS4zMzQsMTYuNDkxLTM5LjY2NiwzNy40NTktNDAuNTEyICBjMi4yMjItMC4wOSw2LjY3My0wLjA5LDguODk1LDBjMjAuOTY4LDAuODQ2LDM3LjQ1OSwxOS4xNzgsMzcuNDU5LDQwLjUxMkMyOTguOTU5LDMzNy4wOTIsMjk0LjYwNSwzNDcuMjY4LDI4Ny4xMjksMzU0LjYyOXogTTM0NS41NzIsMjA5LjgzSDI2MS41aC04Ljg5NWgtODQuMDcydi00NC4zODhjMC00OC45MDUsMzkuNzQ0LTg5LjM0Miw4OC41MTktODkuMzQyczg4LjUyLDQwLjQzNyw4OC41Miw4OS4zNDJWMjA5LjgzeiIvPjwvc3ZnPg=='); margin: 5px; top: 1px; position:relative; } #wpmchimpa-main .wpmchimpa-social{ display: inline-block; margin: 12px auto 0; height: 90px; width: 100%; background: rgba(75, 75, 75, 0.3); box-shadow: 0px 1px 1px 1px rgba(116, 116, 116, 0.94); } #wpmchimpa-main .wpmchimpa-social::before{ content: 'Subscribe with'; font-size: 13px; color: #ADACB2; width: 100%; display: block; margin: 15px auto 5px; } #wpmchimpa-main .wpmchimpa-social .wpmchimpa-soc{ display: inline-block; width:40px; height: 40px; border-radius: 2px; cursor: pointer; -webkit-transition: all 0.1s ease; transition: all 0.1s ease; -webkit-backface-visibility:hidden; border:1px solid #262E43; border-color: #ffffff;} #wpmchimpa-main .wpmchimpa-social .wpmchimpa-soc::before{ content: ''; display: block; width:40px; height: 40px; background: no-repeat center; } #wpmchimpa-main .wpmchimpa-social .wpmchimpa-soc.wpmchimpa-fb { display:none;} #wpmchimpa-main .wpmchimpa-social .wpmchimpa-soc.wpmchimpa-fb::before { background-image:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiNmZmYiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMTVweCIgaGVpZ2h0PSIxNXB4IiB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgNTEyIDUxMiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBhdGggZD0iTTI5Ni4yOTYsNTEySDIwMC4zNlYyNTZoLTY0di04OC4yMjVsNjQtMC4wMjlsLTAuMTA0LTUxLjk3NkMyMDAuMjU2LDQzLjc5NCwyMTkuNzczLDAsMzA0LjU1NiwwaDcwLjU4OHY4OC4yNDJoLTQ0LjExNSBjLTMzLjAxNiwwLTM0LjYwNCwxMi4zMjgtMzQuNjA0LDM1LjM0MmwtMC4xMzEsNDQuMTYyaDc5LjM0NmwtOS4zNTQsODguMjI1TDI5Ni4zNiwyNTZMMjk2LjI5Niw1MTJ6Ii8+PC9zdmc+')} #wpmchimpa-main .wpmchimpa-social .wpmchimpa-soc.wpmchimpa-fb:hover:before { background-image:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiMyZDYwOWIiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMTVweCIgaGVpZ2h0PSIxNXB4IiB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgNTEyIDUxMiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBhdGggZD0iTTI5Ni4yOTYsNTEySDIwMC4zNlYyNTZoLTY0di04OC4yMjVsNjQtMC4wMjlsLTAuMTA0LTUxLjk3NkMyMDAuMjU2LDQzLjc5NCwyMTkuNzczLDAsMzA0LjU1NiwwaDcwLjU4OHY4OC4yNDJoLTQ0LjExNSBjLTMzLjAxNiwwLTM0LjYwNCwxMi4zMjgtMzQuNjA0LDM1LjM0MmwtMC4xMzEsNDQuMTYyaDc5LjM0NmwtOS4zNTQsODguMjI1TDI5Ni4zNiwyNTZMMjk2LjI5Niw1MTJ6Ii8+PC9zdmc+')} #wpmchimpa-main .wpmchimpa-social .wpmchimpa-soc.wpmchimpa-gp { display:none;} #wpmchimpa-main .wpmchimpa-social .wpmchimpa-soc.wpmchimpa-gp:before { background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiNmZmYiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMTVweCIgaGVpZ2h0PSIxNXB4IiB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgNTEyIDUxMiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBhdGggZD0iTTI3My4zNzIsMzAyLjQ5OGMtNS4wNDEtNi43NjItMTAuNjA4LTEzLjA0NS0xNi43LTE4Ljg0MmMtNi4wOTEtNS44MDQtMTIuMTgzLTExLjA4OC0xOC4yNzEtMTUuODQ1IGMtNi4wOTItNC43NTctMTEuNjU5LTkuMzI5LTE2LjcwMi0xMy43MDljLTUuMDQyLTQuMzc0LTkuMTM1LTguOTQ1LTEyLjI3NS0xMy43MDJjLTMuMTQtNC43NTctNC43MTEtOS42MS00LjcxMS0xNC41NTggYzAtNi44NTUsMi4xOS0xMy4yNzgsNi41NjctMTkuMjc0YzQuMzc3LTUuOTk2LDkuNzA3LTExLjc5OSwxNS45ODYtMTcuNDE3YzYuMjgtNS42MTcsMTIuNTU5LTExLjc1MywxOC44NDQtMTguNDE1IGM2LjI3Ni02LjY2NSwxMS42MDQtMTUuNDY1LDE1Ljk4NS0yNi40MTJjNC4zNzMtMTAuOTQ0LDYuNTYzLTIzLjQ1OCw2LjU2My0zNy41NDJjMC0xNi43NS0zLjcxMy0zMi44MzUtMTEuMTM2LTQ4LjI1IGMtNy40MjMtMTUuNDE4LTE3Ljg5LTI3LjQxMi0zMS40MDUtMzUuOTc2aDM4LjU0TDMwMy4yLDBIMTc4LjQ0MWMtMTcuNjk5LDAtMzUuNDk4LDEuOTA2LTUzLjM4NCw1LjcyIGMtMjYuNDUzLDUuOS00OC43MjMsMTkuMzY4LTY2LjgwNiw0MC4zOTdDNDAuMTcxLDY3LjE1LDMxLjEyOSw5MC45OSwzMS4xMjksMTE3LjYzN2MwLDI4LjE3MSwxMC4xMzgsNTEuNTgzLDMwLjQwNiw3MC4yMzMgYzIwLjI2OSwxOC42NDksNDQuNTg1LDI3Ljk3OCw3Mi45NDUsMjcuOTc4YzUuNzEsMCwxMi4zNzEtMC40NzgsMTkuOTg1LTEuNDI3Yy0wLjM4MSwxLjUyMS0xLjA0MywzLjU2Ny0xLjk5Nyw2LjEzNiBzLTEuNzE1LDQuNjItMi4yODYsNi4xNGMtMC41NywxLjUyMS0xLjA0NywzLjM3NS0xLjQyNSw1LjU2NmMtMC4zODIsMi4xOS0wLjU3MSw0LjQyOC0wLjU3MSw2LjcxIGMwLDEyLjU2Myw2LjA4NiwyNi43NDQsMTguMjcxLDQyLjU0MWMtMTQuNDY1LDAuMzg3LTI4LjczNywxLjY3LTQyLjgyNSwzLjg2Yy0xNC4wODQsMi4xOS0yOC44MzMsNS42MTYtNDQuMjUyLDEwLjI4IGMtMTUuNDE3LDQuNjYxLTI5LjIxNywxMS40Mi00MS4zOTYsMjAuMjdjLTEyLjE4Miw4Ljg1NC0yMS4zMTcsMTkuMzY2LTI3LjQwOCwzMS41NDlDMy41MzMsMzYxLjU1OSwwLjAxLDM3NC40MDUsMC4wMSwzODYuMDE3IGMwLDEyLjc1MSwyLjg1NywyNC4zMTQsOC41NjUsMzQuNjljNS43MDgsMTAuMzY5LDEzLjAzNSwxOC44NDIsMjEuOTgyLDI1LjQwNmM4Ljk0NSw2LjU3LDE5LjI3MywxMi4wODMsMzAuOTc4LDE2LjU2MiBjMTEuNzA0LDQuNDcsMjMuMzE1LDcuNjU5LDM0LjgyOSw5LjU2MmMxMS41MTYsMS45MDMsMjIuODg4LDIuODU0LDM0LjExOSwyLjg1NGM1MS4wMDcsMCw5MC45ODEtMTIuNDY0LDExOS45MDktMzcuMzk3IGMyNi42NDgtMjMuMjIzLDM5Ljk3MS01MC4wNjIsMzkuOTcxLTgwLjUxN2MwLTEwLjg1NS0xLjU3LTIwLjk4NC00LjcxMi0zMC40MDlDMjgyLjUxLDMxNy4zMzcsMjc4LjQyLDMwOS4yNTQsMjczLjM3MiwzMDIuNDk4eiBNMTYzLjMxMSwxOTguNzIyYy05LjcwNywwLTE4LjkzNy0yLjQ3NS0yNy42OTQtNy40MjZjLTguNzU3LTQuOTUtMTYuMTgtMTEuMzc0LTIyLjI3LTE5LjI3MyBjLTYuMDg4LTcuODk4LTExLjQxOC0xNi43OTYtMTUuOTg3LTI2LjY5NWMtNC41NjctOS44OTYtNy45NDQtMTkuNzkyLTEwLjEzNS0yOS42OTJjLTIuMTktOS44OTUtMy4yODQtMTkuMzE4LTMuMjg0LTI4LjI2NSBjMC0xOC4yNzEsNC44NTQtMzMuOTc0LDE0LjU2Mi00Ny4xMDhjOS43MDUtMTMuMTM0LDIzLjQxMS0xOS43MDEsNDEuMTEyLTE5LjcwMWMxMi41NjMsMCwyMy45MzUsMy44OTksMzQuMTE4LDExLjcwNCBjMTAuMTgzLDcuODA0LDE4LjE3NywxNy43MDEsMjMuOTg0LDI5LjY5MmM1LjgwMiwxMS45OTEsMTAuMjc3LDI0LjQwNywxMy40MTcsMzcuMjU3YzMuMTQsMTIuODQ3LDQuNzExLDI0Ljk4Myw0LjcxMSwzNi40MDMgYzAsMTkuMDM2LTQuMTM5LDM0LjMxNy0xMi40MTksNDUuODMzQzE5NS4xNDQsMTkyLjk2NCwxODEuNzc1LDE5OC43MjIsMTYzLjMxMSwxOTguNzIyeiBNMjQyLjI1MSw0MTMuMTIzIGMtNS4yMyw4Ljk0OS0xMi4zMTksMTUuOTQtMjEuMjY3LDIwLjk4MWMtOC45NDYsNS4wNDgtMTguNTA5LDguNzU4LTI4LjY5MywxMS4xNGMtMTAuMTgzLDIuMzg1LTIwLjg4OSwzLjU3Mi0zMi4xMiwzLjU3MiBjLTEyLjE4MiwwLTI0LjI3LTEuNDMxLTM2LjI1OC00LjI4NGMtMTEuOTktMi44NTEtMjMuNDU5LTcuMTg3LTM0LjQwMy0xMi45OTFjLTEwLjk0NC01LjgtMTkuNzk1LTEzLjc5OC0yNi41NTEtMjMuOTgyIGMtNi43NTctMTAuMTg0LTEwLjEzNS0yMS43NDQtMTAuMTM1LTM0LjY5YzAtMTEuNDE5LDIuNTY4LTIxLjYwMSw3LjcwOC0zMC41NWM1LjE0Mi04Ljk0NSwxMS43MDktMTYuMDg0LDE5LjcwMi0yMS40MDggYzcuOTk0LTUuMzMyLDE3LjMxOS05LjcxMywyNy45NzktMTMuMTMxYzEwLjY2LTMuNDMzLDIwLjkzNy01LjgwOCwzMC44MzMtNy4xMzljOS44OTUtMS4zMzUsMTkuOTg1LTEuOTk1LDMwLjI2Mi0xLjk5NSBjNi4yODMsMCwxMS4wNDMsMC4xOTEsMTQuMjc3LDAuNTY3YzEuMTQzLDAuNzY3LDQuMDQzLDIuNzU5LDguNzA4LDUuOTk2czcuODA0LDUuNDI4LDkuNDIzLDYuNTcgYzEuNjE1LDEuMTM3LDQuNTY3LDMuMzI2LDguODUsNi41NjNjNC4yODEsMy4yMzcsNy4zMjcsNS42NjEsOS4xMzUsNy4yNzljMS44MDMsMS42MTgsNC40MjEsNC4wNDUsNy44NDksNy4yNzkgYzMuNDI0LDMuMjM3LDUuOTQ4LDYuMDQzLDcuNTY2LDguNDIyYzEuNjE1LDIuMzc4LDMuNjE2LDUuMjgsNS45OTYsOC43MDJjMi4zOCwzLjQzMyw0LjA0Myw2LjcxNSw0Ljk5OCw5Ljg1NSBjMC45NDgsMy4xNDIsMS44NTQsNi41NjcsMi43MDcsMTAuMjc3YzAuODU1LDMuNzIsMS4yODMsNy41NjksMS4yODMsMTEuNTdDMjUwLjEwNSwzOTMuNzEzLDI0Ny40ODcsNDA0LjE4MiwyNDIuMjUxLDQxMy4xMjN6Ii8+IDxwb2x5Z29uIHBvaW50cz0iNDAxLjk5OCw3My4wODkgNDAxLjk5OCwwIDM2NS40NDksMCAzNjUuNDQ5LDczLjA4OSAyOTIuMzU4LDczLjA4OSAyOTIuMzU4LDEwOS42MzYgMzY1LjQ0OSwxMDkuNjM2ICAzNjUuNDQ5LDE4Mi43MjUgNDAxLjk5OCwxODIuNzI1IDQwMS45OTgsMTA5LjYzNiA0NzUuMDgxLDEwOS42MzYgNDc1LjA4MSw3My4wODkiLz48L3N2Zz4=')} #wpmchimpa-main .wpmchimpa-social .wpmchimpa-soc.wpmchimpa-gp:hover:before { background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiNlYjQwMjYiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMTVweCIgaGVpZ2h0PSIxNXB4IiB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgNTEyIDUxMiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBhdGggZD0iTTI3My4zNzIsMzAyLjQ5OGMtNS4wNDEtNi43NjItMTAuNjA4LTEzLjA0NS0xNi43LTE4Ljg0MmMtNi4wOTEtNS44MDQtMTIuMTgzLTExLjA4OC0xOC4yNzEtMTUuODQ1IGMtNi4wOTItNC43NTctMTEuNjU5LTkuMzI5LTE2LjcwMi0xMy43MDljLTUuMDQyLTQuMzc0LTkuMTM1LTguOTQ1LTEyLjI3NS0xMy43MDJjLTMuMTQtNC43NTctNC43MTEtOS42MS00LjcxMS0xNC41NTggYzAtNi44NTUsMi4xOS0xMy4yNzgsNi41NjctMTkuMjc0YzQuMzc3LTUuOTk2LDkuNzA3LTExLjc5OSwxNS45ODYtMTcuNDE3YzYuMjgtNS42MTcsMTIuNTU5LTExLjc1MywxOC44NDQtMTguNDE1IGM2LjI3Ni02LjY2NSwxMS42MDQtMTUuNDY1LDE1Ljk4NS0yNi40MTJjNC4zNzMtMTAuOTQ0LDYuNTYzLTIzLjQ1OCw2LjU2My0zNy41NDJjMC0xNi43NS0zLjcxMy0zMi44MzUtMTEuMTM2LTQ4LjI1IGMtNy40MjMtMTUuNDE4LTE3Ljg5LTI3LjQxMi0zMS40MDUtMzUuOTc2aDM4LjU0TDMwMy4yLDBIMTc4LjQ0MWMtMTcuNjk5LDAtMzUuNDk4LDEuOTA2LTUzLjM4NCw1LjcyIGMtMjYuNDUzLDUuOS00OC43MjMsMTkuMzY4LTY2LjgwNiw0MC4zOTdDNDAuMTcxLDY3LjE1LDMxLjEyOSw5MC45OSwzMS4xMjksMTE3LjYzN2MwLDI4LjE3MSwxMC4xMzgsNTEuNTgzLDMwLjQwNiw3MC4yMzMgYzIwLjI2OSwxOC42NDksNDQuNTg1LDI3Ljk3OCw3Mi45NDUsMjcuOTc4YzUuNzEsMCwxMi4zNzEtMC40NzgsMTkuOTg1LTEuNDI3Yy0wLjM4MSwxLjUyMS0xLjA0MywzLjU2Ny0xLjk5Nyw2LjEzNiBzLTEuNzE1LDQuNjItMi4yODYsNi4xNGMtMC41NywxLjUyMS0xLjA0NywzLjM3NS0xLjQyNSw1LjU2NmMtMC4zODIsMi4xOS0wLjU3MSw0LjQyOC0wLjU3MSw2LjcxIGMwLDEyLjU2Myw2LjA4NiwyNi43NDQsMTguMjcxLDQyLjU0MWMtMTQuNDY1LDAuMzg3LTI4LjczNywxLjY3LTQyLjgyNSwzLjg2Yy0xNC4wODQsMi4xOS0yOC44MzMsNS42MTYtNDQuMjUyLDEwLjI4IGMtMTUuNDE3LDQuNjYxLTI5LjIxNywxMS40Mi00MS4zOTYsMjAuMjdjLTEyLjE4Miw4Ljg1NC0yMS4zMTcsMTkuMzY2LTI3LjQwOCwzMS41NDlDMy41MzMsMzYxLjU1OSwwLjAxLDM3NC40MDUsMC4wMSwzODYuMDE3IGMwLDEyLjc1MSwyLjg1NywyNC4zMTQsOC41NjUsMzQuNjljNS43MDgsMTAuMzY5LDEzLjAzNSwxOC44NDIsMjEuOTgyLDI1LjQwNmM4Ljk0NSw2LjU3LDE5LjI3MywxMi4wODMsMzAuOTc4LDE2LjU2MiBjMTEuNzA0LDQuNDcsMjMuMzE1LDcuNjU5LDM0LjgyOSw5LjU2MmMxMS41MTYsMS45MDMsMjIuODg4LDIuODU0LDM0LjExOSwyLjg1NGM1MS4wMDcsMCw5MC45ODEtMTIuNDY0LDExOS45MDktMzcuMzk3IGMyNi42NDgtMjMuMjIzLDM5Ljk3MS01MC4wNjIsMzkuOTcxLTgwLjUxN2MwLTEwLjg1NS0xLjU3LTIwLjk4NC00LjcxMi0zMC40MDlDMjgyLjUxLDMxNy4zMzcsMjc4LjQyLDMwOS4yNTQsMjczLjM3MiwzMDIuNDk4eiBNMTYzLjMxMSwxOTguNzIyYy05LjcwNywwLTE4LjkzNy0yLjQ3NS0yNy42OTQtNy40MjZjLTguNzU3LTQuOTUtMTYuMTgtMTEuMzc0LTIyLjI3LTE5LjI3MyBjLTYuMDg4LTcuODk4LTExLjQxOC0xNi43OTYtMTUuOTg3LTI2LjY5NWMtNC41NjctOS44OTYtNy45NDQtMTkuNzkyLTEwLjEzNS0yOS42OTJjLTIuMTktOS44OTUtMy4yODQtMTkuMzE4LTMuMjg0LTI4LjI2NSBjMC0xOC4yNzEsNC44NTQtMzMuOTc0LDE0LjU2Mi00Ny4xMDhjOS43MDUtMTMuMTM0LDIzLjQxMS0xOS43MDEsNDEuMTEyLTE5LjcwMWMxMi41NjMsMCwyMy45MzUsMy44OTksMzQuMTE4LDExLjcwNCBjMTAuMTgzLDcuODA0LDE4LjE3NywxNy43MDEsMjMuOTg0LDI5LjY5MmM1LjgwMiwxMS45OTEsMTAuMjc3LDI0LjQwNywxMy40MTcsMzcuMjU3YzMuMTQsMTIuODQ3LDQuNzExLDI0Ljk4Myw0LjcxMSwzNi40MDMgYzAsMTkuMDM2LTQuMTM5LDM0LjMxNy0xMi40MTksNDUuODMzQzE5NS4xNDQsMTkyLjk2NCwxODEuNzc1LDE5OC43MjIsMTYzLjMxMSwxOTguNzIyeiBNMjQyLjI1MSw0MTMuMTIzIGMtNS4yMyw4Ljk0OS0xMi4zMTksMTUuOTQtMjEuMjY3LDIwLjk4MWMtOC45NDYsNS4wNDgtMTguNTA5LDguNzU4LTI4LjY5MywxMS4xNGMtMTAuMTgzLDIuMzg1LTIwLjg4OSwzLjU3Mi0zMi4xMiwzLjU3MiBjLTEyLjE4MiwwLTI0LjI3LTEuNDMxLTM2LjI1OC00LjI4NGMtMTEuOTktMi44NTEtMjMuNDU5LTcuMTg3LTM0LjQwMy0xMi45OTFjLTEwLjk0NC01LjgtMTkuNzk1LTEzLjc5OC0yNi41NTEtMjMuOTgyIGMtNi43NTctMTAuMTg0LTEwLjEzNS0yMS43NDQtMTAuMTM1LTM0LjY5YzAtMTEuNDE5LDIuNTY4LTIxLjYwMSw3LjcwOC0zMC41NWM1LjE0Mi04Ljk0NSwxMS43MDktMTYuMDg0LDE5LjcwMi0yMS40MDggYzcuOTk0LTUuMzMyLDE3LjMxOS05LjcxMywyNy45NzktMTMuMTMxYzEwLjY2LTMuNDMzLDIwLjkzNy01LjgwOCwzMC44MzMtNy4xMzljOS44OTUtMS4zMzUsMTkuOTg1LTEuOTk1LDMwLjI2Mi0xLjk5NSBjNi4yODMsMCwxMS4wNDMsMC4xOTEsMTQuMjc3LDAuNTY3YzEuMTQzLDAuNzY3LDQuMDQzLDIuNzU5LDguNzA4LDUuOTk2czcuODA0LDUuNDI4LDkuNDIzLDYuNTcgYzEuNjE1LDEuMTM3LDQuNTY3LDMuMzI2LDguODUsNi41NjNjNC4yODEsMy4yMzcsNy4zMjcsNS42NjEsOS4xMzUsNy4yNzljMS44MDMsMS42MTgsNC40MjEsNC4wNDUsNy44NDksNy4yNzkgYzMuNDI0LDMuMjM3LDUuOTQ4LDYuMDQzLDcuNTY2LDguNDIyYzEuNjE1LDIuMzc4LDMuNjE2LDUuMjgsNS45OTYsOC43MDJjMi4zOCwzLjQzMyw0LjA0Myw2LjcxNSw0Ljk5OCw5Ljg1NSBjMC45NDgsMy4xNDIsMS44NTQsNi41NjcsMi43MDcsMTAuMjc3YzAuODU1LDMuNzIsMS4yODMsNy41NjksMS4yODMsMTEuNTdDMjUwLjEwNSwzOTMuNzEzLDI0Ny40ODcsNDA0LjE4MiwyNDIuMjUxLDQxMy4xMjN6Ii8+IDxwb2x5Z29uIHBvaW50cz0iNDAxLjk5OCw3My4wODkgNDAxLjk5OCwwIDM2NS40NDksMCAzNjUuNDQ5LDczLjA4OSAyOTIuMzU4LDczLjA4OSAyOTIuMzU4LDEwOS42MzYgMzY1LjQ0OSwxMDkuNjM2ICAzNjUuNDQ5LDE4Mi43MjUgNDAxLjk5OCwxODIuNzI1IDQwMS45OTgsMTA5LjYzNiA0NzUuMDgxLDEwOS42MzYgNDc1LjA4MSw3My4wODkiLz48L3N2Zz4=')} #wpmchimpa-main .wpmchimpa-social .wpmchimpa-soc.wpmchimpa-ms { display:none;} #wpmchimpa-main .wpmchimpa-social .wpmchimpa-soc.wpmchimpa-ms::before { background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiNmZmYiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMTVweCIgaGVpZ2h0PSIxNXB4IiB2aWV3Qm94PSIwIDAgMTcgMTciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE3IDE3IiB4bWw6c3BhY2U9InByZXNlcnZlIj48cGF0aCBkPSJNOC4wMjEsMS4zODV2Ni40MzdoOC43OTFWMC4xMjdMOC4wMjEsMS4zODV6IE0wLDcuODIyaDYuNjQ4VjEuNDk0TDAsMi40NDNWNy44MjJ6IE0wLDE0LjE3NSBsNi42NDgsMS4wMzFWOC42M0gwVjE0LjE3NXogTTguMDIxLDE1LjMyMWw4Ljc5MSwxLjM2NFY4LjYzSDguMDIxVjE1LjMyMXoiLz48L3N2Zz4=')} #wpmchimpa-main .wpmchimpa-social .wpmchimpa-soc.wpmchimpa-ms:hover:before { background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiMwMEJDRjIiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMTVweCIgaGVpZ2h0PSIxNXB4IiB2aWV3Qm94PSIwIDAgMTcgMTciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE3IDE3IiB4bWw6c3BhY2U9InByZXNlcnZlIj48cGF0aCBkPSJNOC4wMjEsMS4zODV2Ni40MzdoOC43OTFWMC4xMjdMOC4wMjEsMS4zODV6IE0wLDcuODIyaDYuNjQ4VjEuNDk0TDAsMi40NDNWNy44MjJ6IE0wLDE0LjE3NSBsNi42NDgsMS4wMzFWOC42M0gwVjE0LjE3NXogTTguMDIxLDE1LjMyMWw4Ljc5MSwxLjM2NFY4LjYzSDguMDIxVjE1LjMyMXoiLz48L3N2Zz4=')} #wpmchimpa-main .wpmchimpa-close-button{ position: absolute; display: block; top: 0; right: 0; width: 25px; text-align: center; cursor: pointer; } #wpmchimpa-main .wpmchimpa-close-button::before{ content: "\00D7"; font-size: 25px; line-height: 25px; font-weight: 100; color: #999; opacity: 0.4; color:;} #wpmchimpa-main .wpmchimpa-close-button:hover:before{ opacity: 1; } #wpmchimpa-main .wpmchimpa-feedback.wpmchimpa-done{ font-size: 15px; margin: 10px; height: auto;} #wpmchimpa-main .wpmchimpa-feedback.wpmchimpa-done:before{ content:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiNmZmYiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMTVweCIgaGVpZ2h0PSIxNXB4IiB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgNTEyIDUxMiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBvbHlnb24gcG9pbnRzPSIxNDIuOCwzMjMuODUgMzUuNywyMTYuNzUgMCwyNTIuNDUgMTQyLjgsMzk1LjI1IDQ0OC44LDg5LjI1IDQxMy4xLDUzLjU1Ii8+PC9zdmc+'); width: 40px; height: 40px; border-radius: 20px; line-height: 46px; display: block; background-color: #01E169; margin: 40px auto; } .wpmc_2col #wpmchimpa .wpmc_colsplit{ width: calc(50% - 5px); display: inline-block; float: left; } .wpmc_2col #wpmchimpa .wpmc_coleven{ margin-left: 10px; } @media only screen and (max-width: 600px){ .wpmc_2col #wpmchimpa .wpmc_colsplit{ width: 100%; margin-left: 0; } } .animated { -webkit-animation-duration: 1s; animation-duration: 1s; -webkit-animation-fill-mode: both; animation-fill-mode: both; } @-webkit-keyframes bounceInDown { 0%, 60%, 75%, 90%, 100% { -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); } 0% { opacity: 0; -webkit-transform: translate3d(0, -3000px, 0); transform: translate3d(0, -3000px, 0); } 60% { opacity: 1; -webkit-transform: translate3d(0, 25px, 0); transform: translate3d(0, 25px, 0); } 75% { -webkit-transform: translate3d(0, -10px, 0); transform: translate3d(0, -10px, 0); } 90% { -webkit-transform: translate3d(0, 5px, 0); transform: translate3d(0, 5px, 0); } 100% { -webkit-transform: none; transform: none; } } @keyframes bounceInDown { 0%, 60%, 75%, 90%, 100% { -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); } 0% { opacity: 0; -webkit-transform: translate3d(0, -3000px, 0); transform: translate3d(0, -3000px, 0); } 60% { opacity: 1; -webkit-transform: translate3d(0, 25px, 0); transform: translate3d(0, 25px, 0); } 75% { -webkit-transform: translate3d(0, -10px, 0); transform: translate3d(0, -10px, 0); } 90% { -webkit-transform: translate3d(0, 5px, 0); transform: translate3d(0, 5px, 0); } 100% { -webkit-transform: none; transform: none; } } .bounceInDown { -webkit-animation-name: bounceInDown; animation-name: bounceInDown; } .animatedout { -webkit-animation-duration: 1s; animation-duration: 1s; -webkit-animation-fill-mode: both; animation-fill-mode: both; } @-webkit-keyframes rollOut { 0% { opacity: 1; } 100% { opacity: 0; -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); } } @keyframes rollOut { 0% { opacity: 1; } 100% { opacity: 0; -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); } } .rollOut { -webkit-animation-name: rollOut; animation-name: rollOut; } @-webkit-keyframes zoomIn { 0% { opacity: 0; -webkit-transform: scale3d(.3, .3, .3); transform: scale3d(.3, .3, .3); } 50% { opacity: 1; } } </style> <div class="wpmchimpa-reset wpmchimpa-overlay-bg wpmchimpselector chimpmatecss"> <div class="wpmchimpa-maina bounceInDown animated" wpmcexitanim> <div class="wpmchimpa-mainc"> <div id="wpmchimpa-main"> <div id="wpmchimpa-newsletterform" class="wpmchimpa-wrapper"> <div class="wpmchimpa" id="wpmchimpa"> <h3>زنگ.</h3> <div class="wpmchimpa_para"><div style="text-align: center;">کسانی هستند که این خبر را قبل از شما خوانده اند.</div><div style="text-align: center;">مشترک شدن برای دریافت مقالات تازه. <img src="http://" loading=lazy loading=lazy></div></div> <form wpmc_suc wpmc_msg="Спасибо! ПРОВЕРЬТЕ ПОЧТУ" action="" method="post"> <input type="hidden" name="action" value="wpmchimpa_add_email_ajax"/> <input type="hidden" name="wpmcform" value="1"/> <div class="formbox wpmchimpa-field"><div class="wpmchimpa-text wpmc-ficon"><input type="text" name="email" wpmctype="email" wpmcfield="email" wpmcreq="true" required/><span class="inputlabel">پست الکترونیک</span><span class="inputicon"></span><div class="wpmcinfierr" wpmcerr="email"></div></div><div class="wpmchimpa-subsc"><div class="wpmchimpa-subs-button"></div><div class="wpmchimpa-signal"><style type="text/css">#wpmchimpa-main .sp8 { margin: 0 auto;width: 50px;height: 30px;} #wpmchimpa-main .sp8 > div { background-color: #3d3d3d;margin-left: 3px;height: 100%;width: 6px;display: inline-block;-webkit-animation: wpmchimpa-mainsp8 1.2s infinite ease-in-out;animation: wpmchimpa-mainsp8 1.2s infinite ease-in-out;} #wpmchimpa-main .sp8 .sp82 { -webkit-animation-delay: -1.1s;animation-delay: -1.1s;} #wpmchimpa-main .sp8 .sp83 { -webkit-animation-delay: -1.0s;animation-delay: -1.0s;} #wpmchimpa-main .sp8 .sp84 { -webkit-animation-delay: -0.9s;animation-delay: -0.9s;} #wpmchimpa-main .sp8 .sp85 { -webkit-animation-delay: -0.8s;animation-delay: -0.8s;} @-webkit-keyframes wpmchimpa-mainsp8 { 0%, 40%, 100% { -webkit-transform: scaleY(0.4) } 20% { -webkit-transform: scaleY(1.0) } }@keyframes wpmchimpa-mainsp8 { 0%, 40%, 100% { transform: scaleY(0.4);-webkit-transform: scaleY(0.4);} 20% { transform: scaleY(1.0);-webkit-transform: scaleY(1.0);} }</style><div class="sp8"><div class="sp81"></div><div class="sp82"></div><div class="sp83"></div><div class="sp84"></div><div class="sp85"></div></div></div></div><div style="clear:both"></div></div><div class="wpmchimpa-field wpmchimpa-text wpmc_colsplit wpmc-ficon"><input type="text" name="merge_fields[FNAME]" wpmctype="text" wpmcfield="FNAME" wpmcreq="true" required/><span class="inputlabel">نام</span><span class="inputicon"></span><div class="wpmcinfierr" wpmcerr="FNAME"></div></div><div class="wpmchimpa-field wpmchimpa-text wpmc_colsplit wpmc-ficon"><input type="text" name="merge_fields[LNAME]" wpmctype="text" wpmcfield="LNAME" wpmcreq="true" required/><span class="inputlabel">نام خانوادگی</span><span class="inputicon"></span><div class="wpmcinfierr" wpmcerr="LNAME"></div></div><div class="wpmchimpa-field wpmchimpa-radio"><div class="wpmchimpa-itemh">چگونه می خواهید زنگ را بخوانید</div><div class="wpmchimpa-itemb"><label class="wpmchimpa-item"><input type="radio" name="group[f899931c09]" value="a22E2103B4." wpmctype="radio" wpmcfield="f899931c09" wpmcreq="true"><span>دوبار در روز</span></label><label class="wpmchimpa-item"><input type="radio" name="group[f899931c09]" value="4ab55de31a." wpmctype="radio" wpmcfield="f899931c09" wpmcreq="true"><span>خبرنامه صبح</span></label><label class="wpmchimpa-item"><input type="radio" name="group[f899931c09]" value="e386C1935E." wpmctype="radio" wpmcfield="f899931c09" wpmcreq="true"><span>خبرنامه شبانه</span></label></div><div class="wpmcinfierr" wpmcerr="f899931c09"></div></div> <div style="clear:both"></div> <div class="wpmchimpa-tag">بدون هرزنامه</div> </form> <div class="wpmchimpa-feedback" wpmcerr="gen"></div> </div> </div> <div class="wpmchimpa-close-button"></div> </div> </div> </div> </div><script data-cfasync="false" src="/cdn-cgi/scripts/af2821b0/cloudflare-static/email-decode.min.js"></script><script type='text/javascript' src='https://qipu.ru/wp-content/themes/authentic/js/vendors.min.js?ver=201710093'></script> <script type='text/javascript'> /* <![CDATA[ */ var translation = { "next":"Next","previous":"Previous"} ; /* ]]> */ </script> <script type='text/javascript' src='https://qipu.ru/wp-content/themes/authentic/js/scripts.js?ver=201710093'></script> <script type='text/javascript' src='/wp-includes/js/wp-embed.min.js?ver=9.9.9'></script> <script type='text/javascript' src='https://qipu.ru/wp-content/plugins/chimpmatepro/public/assets/js/public.js?ver=1.3.2'></script> </body> </html>