คอมพิวเตอร์ Windows อินเทอร์เน็ต

วิธีสร้างไฟล์ xml delphi คู่มือการเดินทางทางอินเทอร์เน็ต - ความสนุกทั้งหมดบนเว็บ คำสองสามคำเกี่ยวกับการจัดโฟลว์เอกสาร

ยินดีต้อนรับ! บล็อกนี้เกี่ยวกับอินเทอร์เน็ตและคอมพิวเตอร์ หรือค่อนข้างจะอุทิศให้กับพวกเขา

อาจเป็นที่ชัดเจนว่าไม่มีบทความใหม่ปรากฏบนเว็บไซต์เป็นเวลาหลายปี ใช่ นั่นคือชะตากรรมของบล็อกส่วนใหญ่ โครงการนี้ครั้งหนึ่งเคยเป็นงานที่มีความทะเยอทะยาน และผู้เขียนก็เหมือนกับคนอื่นๆ อีกหลายคนที่เขียนในขณะนั้น มีแผนทะเยอทะยานที่จะกลายเป็นหนึ่งในบล็อกเกอร์ชาวรัสเซียที่ดีที่สุด ถ้าคุณดูตอนนี้ บล็อกเหล่านั้นที่สร้างขึ้นพร้อมกับฉัน ส่วนใหญ่หายไปตลอดกาล และฉันก็ไม่มีเวลาพอที่จะเขียนบล็อก ใช่แล้ว มันไม่อัปเดตอีกต่อไป แม้ว่าเมื่อเรากับไซต์นี้ชนะการแข่งขัน "Blog of Runet 2011"

ฉันมีความคิดที่จะลบสิ่งเหล่านี้ทั้งหมด แต่แล้วฉันก็แก้ไขเนื้อหาเก่าและตระหนักว่ายังคงมีประโยชน์ต่อผู้อ่าน ใช่ บทความบางบทความล้าสมัย (หากฉันมีความแข็งแกร่งเพียงพอ พวกเขาจะได้รับบันทึกย่อที่เหมาะสม) แต่เว็บไซต์ ตัวอย่างเช่น อาจมีประโยชน์สำหรับผู้เริ่มต้น - คุณสามารถอ่านได้ที่นี่ แนวคิดพื้นฐานอินเทอร์เน็ต เรียนรู้วิธีกำหนดค่าอินเทอร์เน็ต Windows หรือแม้แต่ตัดสินใจเปลี่ยนไปใช้ Linux ให้ดูเกณฑ์การให้คะแนนและเลือกเกณฑ์ที่เหมาะสมกับคุณ

และถึงกระนั้น ฉันหวังว่านี่จะไม่ใช่แค่บล็อก แต่เป็นแนวทางที่แท้จริงสำหรับอินเทอร์เน็ต ไซต์สามารถดูได้ในโหมดไดเร็กทอรี ซึ่งบทความที่มีอยู่ทั้งหมดมีโครงสร้างตามหมวดหมู่ และใครจะไปรู้ บางทีวันหนึ่งบทความคุณภาพสูงใหม่ๆ ก็เริ่มปรากฏขึ้นที่นี่

แซนเดอร์

Picodi.ru เป็นพอร์ทัลส่วนลดจาก International Coupons ผู้เชี่ยวชาญด้านการออมและการช้อปปิ้งราคาถูกของโปแลนด์ ชาวโปแลนด์ถือเป็นหนึ่งในประเทศที่ประหยัดที่สุดในโลก จึงไม่น่าแปลกใจที่โครงการประเภทนี้จะเติบโตจากการเริ่มต้นของโปแลนด์ kodyrabatowe.pl พอร์ทัลนี้จะมีประโยชน์ต่อผู้ใช้อินเทอร์เน็ตทั่วไปในรัสเซียได้อย่างไร

โทรศัพท์ Android สมัยใหม่เป็นมากกว่าโทรศัพท์ คุณคุ้นเคยกับการพิมพ์ โปรแกรมที่ติดตั้ง, ไปยังประวัติการโทรของคุณและ ข้อความ, คอลเลกชั่นรูปภาพ และอื่นๆ แต่เวลาผ่านไป และอุปกรณ์ที่เหมาะสมกับคุณจะเริ่มทำงานช้าลง ผิดพลาด หรือสูญเสียรูปลักษณ์ที่เรียบร้อยไปเนื่องจากชิปบนเคสหรือรอยขีดข่วนบนหน้าจอ คำถามเกิดขึ้นกับการเลือกโทรศัพท์ใหม่และการเปลี่ยนแปลง โทรศัพท์ Android... และถ้าตอนนี้เราข้ามคำถามที่เลือกแล้ว "ย้าย" ไปที่ โทรศัพท์ใหม่ยังคงเป็นปัญหาร้ายแรง - คุณไม่ต้องการเริ่มข้อมูลทั้งหมดตั้งแต่เริ่มต้น นี่คือสิ่งที่เราจะพูดถึงในวันนี้

ผู้อ่านบล็อกนี้ส่วนใหญ่มักไม่เคยพบกับระบบควบคุมเวอร์ชันและจะไม่พบระบบใด ๆ ในอนาคตอันใกล้นี้ มันน่าเสียดาย สิ่งประดิษฐ์ที่สะดวกสบายอย่างยิ่งนี้ถูกใช้กันอย่างแพร่หลายโดยโปรแกรมเมอร์ แต่ในความคิดของฉัน มันอาจจะมีประโยชน์มากสำหรับผู้ที่ทำงานกับข้อความอย่างแข็งขัน แต่น่าจะตอนนี้ไม่มีระบบควบคุมเวอร์ชันเดียวที่จะเริ่มต้นใช้งานสำหรับ "สำนักงาน" ได้ง่าย ( Microsoft Office) งาน. อย่างไรก็ตาม ฉันคิดว่าเนื้อหาที่นำเสนอในบทความอาจน่าสนใจสำหรับผู้อ่านทุกคน

หากคุณเคยคิดว่าจะดูภาพยนตร์บนเครือข่ายจากทีวีและออนไลน์ได้อย่างไร บทความนี้เหมาะสำหรับคุณ ไม่ ฉันรู้ว่าทีวีบางรุ่นมีฟังก์ชัน Smart TV อยู่แล้ว แต่ฉันไม่เคยเห็นว่ามันทำงานอย่างถูกต้องมาก่อน เห็นได้ชัดว่าเมื่อเร็ว ๆ นี้ บริษัท Google ได้สาธิตอุปกรณ์ที่น่าทึ่งอย่างยิ่งซึ่งกลายเป็นความรู้สึกทันที เรากำลังพูดถึง Chromecast media streamer (Chromecast) ซึ่งเป็น Nexus Q รุ่นหายนะที่ล้ำหน้ากว่าและราคาไม่แพงในปีที่แล้ว

Dongle Chromecast ซึ่งมีขนาดไม่เกิน 2 นิ้ว เสียบเข้ากับพอร์ต ทีวี HDMIและให้คุณเพลิดเพลินกับการรับชมเนื้อหาเว็บสตรีมมิ่ง ในการควบคุมสตรีมเมอร์ คุณสามารถใช้อุปกรณ์ใดก็ได้ (แท็บเล็ต พีซี สมาร์ทโฟน) ที่ใช้ระบบปฏิบัติการ iOS, Windows, Android หรือ Mac OS

บทความนี้มีไว้สำหรับอุปกรณ์ของหน่วยความจำระบบ Android ปัญหาที่อาจเกิดขึ้นเนื่องจากการขาดแคลนและวิธีแก้ปัญหา เมื่อไม่นานมานี้ ตัวฉันเองต้องเผชิญกับความจริงที่ว่าโทรศัพท์ Android ของฉันเริ่มส่งข้อความเกี่ยวกับหน่วยความจำไม่เพียงพอเป็นประจำเมื่อพยายามติดตั้งแอปพลิเคชัน ซึ่งแปลกมากสำหรับฉัน เนื่องจากตามคำอธิบายในตลาดควรมีขนาดประมาณ 16GB และฉันก็เพิ่มปริมาณนี้ด้วยการ์ดหน่วยความจำเพิ่มเติม อย่างไรก็ตาม มันมีปัญหาและฉันต้องคิดมากก่อนจะเจอ การตัดสินใจที่ถูกต้องที่ไม่ต้องการการเข้าถึงรูทหรือคืนค่าโทรศัพท์จากโรงงานทั้งหมด

มีการใช้ XML มากขึ้นในการจัดเก็บข้อมูลและแลกเปลี่ยนข้อมูลระหว่างแอปพลิเคชันและเว็บไซต์ แอปพลิเคชั่นจำนวนมากใช้ภาษานี้เป็นภาษาพื้นฐานสำหรับการจัดเก็บข้อมูล ในขณะที่แอปพลิเคชั่นอื่นๆ ใช้สำหรับการส่งออกและนำเข้าข้อมูล XML ดังนั้นจึงถึงเวลาแล้วที่นักพัฒนาจะต้องเริ่มคิดว่าจะใช้ข้อมูล XML ในแอปพลิเคชันของตนเองได้อย่างไร

ในบทความนี้ เราจะดู XML Document Object Model (DOM) และการนำ XML DOM ไปใช้งานของ Microsoft

XML DOM เป็นอ็อบเจ็กต์โมเดลที่ให้นักพัฒนามีอ็อบเจ็กต์สำหรับการโหลดและประมวลผลไฟล์ XML โมเดลอ็อบเจ็กต์ประกอบด้วยอ็อบเจ็กต์หลักต่อไปนี้: XMLDOMDocument, XMLDOMNodeList, XMLDOMNode, XMLDOMNamedNodeMap และ XMLDOMparseError แต่ละอ็อบเจ็กต์เหล่านี้ (ยกเว้น XMLDOMparseError) มีคุณสมบัติและวิธีการที่ช่วยให้คุณรับข้อมูลเกี่ยวกับออบเจ็กต์ จัดการค่าและโครงสร้างของอ็อบเจ็กต์ และนำทางโครงสร้างของเอกสาร XML

มาดูออบเจ็กต์ XML DOM หลักและแสดงตัวอย่างการใช้งานใน Borland Delphi

การใช้ XML DOM ใน Borland Delphi

ในการใช้ Microsoft XML DOM ในแอปพลิเคชัน Delphi คุณต้องเชื่อมต่อไลบรารีประเภทที่เหมาะสมกับโครงการ ในการดำเนินการนี้ เรารันคำสั่ง Project | Import Type Library และในกล่องโต้ตอบ Import Type Library ให้เลือกไลบรารี Microsoft XML เวอร์ชัน 2.0 (เวอร์ชัน 2.0) ซึ่งมักจะอยู่ในไฟล์ Windows \ System \ MSXML.DLL

หลังจากคลิกปุ่มสร้างหน่วย โมดูลอินเทอร์เฟซ MSXML_TLB จะถูกสร้างขึ้น ซึ่งจะช่วยให้เราใช้วัตถุ XML DOM: DOMDocument, XMLDocument, XMLHTTPRequest และอื่นๆ อีกจำนวนหนึ่ง นำไปใช้ในไลบรารี MSXML.DLL การอ้างอิงถึงโมดูล MSXML_TLB ต้องอยู่ในรายการ Uses

อุปกรณ์ XML DOM

Document Object Model แสดงถึงเอกสาร XML ในโครงสร้างแบบต้นไม้ของกิ่ง XML DOM API อนุญาตให้แอปพลิเคชันนำทางโครงสร้างเอกสารและจัดการสาขา แต่ละสาขาสามารถมีประเภทเฉพาะได้ (DOMNodeType) ตามที่กำหนดสาขาหลักและสาขาย่อย เอกสาร XML ส่วนใหญ่มีสาขาขององค์ประกอบประเภท แอตทริบิวต์ และข้อความ คุณลักษณะเป็นสาขาพิเศษและไม่ใช่สาขาย่อย วิธีการพิเศษที่จัดเตรียมโดยวัตถุ XML DOM ใช้เพื่อจัดการแอตทริบิวต์

นอกเหนือจากการใช้อินเทอร์เฟซที่แนะนำของ World Wide Web Consortium (W3C) แล้ว Microsoft XML DOM ยังมีเมธอดที่สนับสนุน XSL, XSL Patterns, Namespaces และประเภทข้อมูล ตัวอย่างเช่น เมธอด SelectNodes ให้คุณใช้ไวยากรณ์รูปแบบ XSL เพื่อค้นหาสาขาในบริบทเฉพาะ และวิธีการ TransformNode รองรับการใช้ XSL เพื่อทำการแปลง

เอกสาร XML ทดสอบ

เป็นตัวอย่างเอกสาร XML ลองใช้ไดเร็กทอรีซีดีรอมเพลงซึ่งมีโครงสร้างดังต่อไปนี้:

อาณาจักรล้อเลียน บ็อบ ดีแลน สหรัฐอเมริกา โคลัมเบีย 10.90 1985 ซ่อนหัวใจ บอนนี่ ไทเลอร์ สหราชอาณาจักร CBS Records 9.90 1988 ... ปลดปล่อยหัวใจของฉัน โจ ค็อกเกอร์ สหรัฐอเมริกา EM 8.20 1987

ตอนนี้เราพร้อมที่จะเริ่มดูโมเดลวัตถุ XML DOM โดยเริ่มจากวัตถุ XMLDOMDocument

เอกสาร XML - XMLDOMDocument Object

การทำงานกับเอกสาร XML เริ่มต้นด้วยการโหลดเอกสาร ในการดำเนินการนี้ เราใช้วิธี Load ซึ่งมีพารามิเตอร์เพียงตัวเดียวที่ระบุ URL ของเอกสารที่โหลด เมื่อโหลดไฟล์จากโลคัลดิสก์ จะระบุเฉพาะชื่อไฟล์แบบเต็มเท่านั้น (ไฟล์: /// สามารถละเว้นโปรโตคอลได้ในกรณีนี้) ถ้าเอกสาร XML ถูกจัดเก็บเป็นสตริง ให้ใช้วิธี LoadXML เพื่อโหลดเอกสาร

คุณสมบัติ Async ใช้เพื่อควบคุมวิธีการโหลดเอกสาร (ซิงโครนัสหรืออะซิงโครนัส) ตามค่าเริ่มต้น คุณสมบัตินี้ถูกตั้งค่าเป็น True ซึ่งบ่งชี้ว่าเอกสารถูกโหลดแบบอะซิงโครนัสและการควบคุมจะถูกส่งกลับไปยังแอปพลิเคชันก่อนที่เอกสารจะโหลดจนเต็ม มิฉะนั้น เอกสารจะโหลดแบบซิงโครนัส จากนั้นคุณต้องตรวจสอบค่าของคุณสมบัติ ReadyState เพื่อดูว่ามีการโหลดเอกสารหรือไม่ คุณยังสามารถสร้างตัวจัดการสำหรับเหตุการณ์ OnReadyStateChange ที่จะควบคุมเมื่อค่าของคุณสมบัติ ReadyState เปลี่ยนแปลง

ข้อมูลต่อไปนี้แสดงวิธีการโหลดเอกสาร XML โดยใช้วิธี Load:

ใช้ ... MSXML_TLB ... ขั้นตอน TForm1.Button1Click (ผู้ส่ง: TObject); var XMLDoc: IXMLDOMDocument; เริ่ม XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = เท็จ; XMLDoc.Load ('C: \ DATA \ DATA.xml'); // // นี่คือตำแหน่งที่โค้ดที่จัดการ // เอกสาร XML และสาขา // XMLDoc: = ไม่มี; จบ;

หลังจากโหลดเอกสารแล้ว เราสามารถเข้าถึงคุณสมบัติของเอกสารได้ ดังนั้น คุณสมบัติ NodeName จะมีค่า #document คุณสมบัติ NodeTypeString จะมีค่าเอกสาร และคุณสมบัติ URL จะมีไฟล์: /// C: /DATA/DATA.xml ค่า

การจัดการข้อผิดพลาด

สิ่งที่น่าสนใจเป็นพิเศษคือคุณสมบัติที่เกี่ยวข้องกับการประมวลผลเอกสารเมื่อโหลด ตัวอย่างเช่น คุณสมบัติ ParseError ส่งคืนอ็อบเจ็กต์ XMLDOMParseError ที่มีข้อมูลเกี่ยวกับข้อผิดพลาดที่เกิดขึ้นขณะประมวลผลเอกสาร

ในการเขียนตัวจัดการข้อผิดพลาด คุณสามารถเพิ่มรหัสต่อไปนี้:

Var XMLError: IXMLDOMparseError; ... XMLDoc.Load ('C: \ DATA \ DATA.xml'); XMLError: = XMLDoc.ParseError; ถ้า XMLError.ErrorCode<>0 จากนั้น // // ที่นี่เราจัดการกับข้อผิดพลาด // Else Memo1.Lines.Add (XMLDoc.XML); ... XMLDoc: = ไม่มี;

หากต้องการทราบข้อมูลที่ส่งคืนในกรณีที่เกิดข้อผิดพลาด ให้เปลี่ยนรายการไดเรกทอรีต่อไปนี้:

อาณาจักรล้อเลียน บ็อบ ดีแลน สหรัฐอเมริกา โคลัมเบีย 10.90 1985

ถอดองค์ประกอบปิด ในบรรทัดที่สอง:</p><p> <CD> <TITLE>อาณาจักรล้อเลียน <ARTIST>บ็อบ ดีแลน</ARTIST> <COUNTRY>สหรัฐอเมริกา</COUNTRY> <COMPANY>โคลัมเบีย</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> </p><p>ตอนนี้เรามาเขียนโค้ดที่คืนค่าคุณสมบัติของอ็อบเจกต์ XMLDOMparseError:</p><p>XMLError: = XMLDoc.ParseError; ถ้า XMLError.ErrorCode<>0 จากนั้นด้วย XMLError Memo1.Lines จะเริ่มเพิ่ม ('ไฟล์:' + URL); เพิ่ม ('รหัส:' + IntToStr (รหัสข้อผิดพลาด)); เพิ่ม ('ข้อผิดพลาด:' + เหตุผล); เพิ่ม ('ข้อความ:' + SrcText); เพิ่ม ('บรรทัด:' + IntToStr (บรรทัด)); เพิ่ม ('ตำแหน่ง:' + IntToStr (LinePos)); สิ้นสุด Memo1.Lines.Add อื่น (XMLDoc.XML); จบ;</p><p>และดำเนินการสมัครของเรา ด้วยเหตุนี้ เราจึงได้รับข้อมูลต่อไปนี้เกี่ยวกับข้อผิดพลาด</p> <p>ดังที่คุณเห็นจากตัวอย่างข้างต้น ข้อมูลที่ส่งคืนโดยอ็อบเจ็กต์ XMLDOMParseError นั้นเพียงพอที่จะแปลข้อผิดพลาดและเข้าใจสาเหตุของการเกิดขึ้น</p> <p>ตอนนี้เราจะคืนค่าองค์ประกอบปิด <TITLE>ในเอกสารของเราและดำเนินการอภิปราย XML DOM ต่อไป</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>การเข้าถึงแผนผังเอกสาร</h2> <p>ในการเข้าถึงแผนผังเอกสาร คุณสามารถรับองค์ประกอบรูทแล้ววนซ้ำบนสาขาย่อยหรือค้นหาสาขาที่ต้องการ ในกรณีแรก เราได้รับองค์ประกอบรูทผ่านคุณสมบัติ DocumentElement ซึ่งส่งคืนอ็อบเจ็กต์ประเภท XMLDOMNode ต่อไปนี้คือวิธีใช้คุณสมบัติ DocumentElement เพื่อรับเนื้อหาของแต่ละองค์ประกอบย่อย:</p><p>โหนด Var: IXMLDOMNode; ราก: IXMLDOMEองค์ประกอบ; ฉัน: จำนวนเต็ม; ... รูท: = XMLDoc.DocumentElement; สำหรับฉัน: = 0 ถึง Root.ChildNodes.Length-1 ทำ Begin Node: = Root.ChildNodes.Item [I]; Memo1.Lines.Add (โหนด.ข้อความ); จบ;</p><p>สำหรับเอกสาร XML ของเรา เราได้รับข้อความต่อไปนี้</p> <p>หากเราสนใจสาขาใดสาขาหนึ่งหรือสาขาใดสาขาหนึ่งที่อยู่ต่ำกว่าสาขาย่อยสาขาแรก เราสามารถใช้เมธอด NodeFromID หรือเมธอด GetElementByTagName ของอ็อบเจ็กต์ XMLDOMDocument</p> <p>วิธีการ NodeFromID ต้องการตัวระบุเฉพาะตามที่กำหนดไว้ใน XML Schema หรือ Document Type Definition (DTD) และส่งคืนสาขาที่มีตัวระบุนั้น</p> <p>เมธอด GetElementByTagName ต้องใช้สตริงที่มีองค์ประกอบเฉพาะ (แท็ก) และส่งคืนสาขาทั้งหมดที่มีองค์ประกอบนี้ ต่อไปนี้คือวิธีใช้วิธีนี้เพื่อค้นหาศิลปินทั้งหมดในไดเร็กทอรี CD-ROM ของเรา:</p><p>โหนด: IXMLDOMNodeList; โหนด: IXMLDOMNode; ... โหนด: = XMLDoc.GetElementsByTagName ('ARTIST'); สำหรับ I: = 0 ถึง Nodes.Length-1 ทำ Begin Node: = Nodes.Item [I]; Memo1.Lines.Add (โหนด.ข้อความ); จบ;</p><p>สำหรับเอกสาร XML ของเรา เราจะได้ข้อความต่อไปนี้</p> <p>โปรดทราบว่าเมธอด SelectNodes ของอ็อบเจ็กต์ XMLDOMNode เป็นวิธีที่ยืดหยุ่นกว่าในการเข้าถึงสาขาของเอกสาร แต่เพิ่มเติมเกี่ยวกับที่ด้านล่าง</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>สาขาเอกสาร - XMLDOMNode Object</h2> <p>วัตถุ XMLDOMNode แสดงถึงสาขาเอกสาร เราพบวัตถุนี้แล้วเมื่อเราได้รับองค์ประกอบรูทของเอกสาร:</p><p>ราก: = XMLDoc.DocumentElement;</p><p>เมื่อต้องการรับข้อมูลเกี่ยวกับสาขาของเอกสาร XML คุณสามารถใช้คุณสมบัติของอ็อบเจ็กต์ XMLDOMNode (ตารางที่ 1)</p> <p>ในการเข้าถึงข้อมูลที่จัดเก็บไว้ในสาขา เป็นเรื่องปกติที่จะใช้คุณสมบัติ NodeValue (มีให้สำหรับแอตทริบิวต์ สาขาข้อความ ความคิดเห็น คำแนะนำในการประมวลผล และส่วน CDATA) หรือคุณสมบัติ Text ซึ่งส่งคืนเนื้อหาที่เป็นข้อความของสาขา หรือคุณสมบัติ NodeTypedValue อย่างไรก็ตาม สิ่งหลังสามารถใช้ได้เฉพาะสำหรับสาขาที่มีรายการพิมพ์เท่านั้น</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>การนำทางโครงสร้างเอกสาร</h3> <p>ออบเจ็กต์ XMLDOMNode มีหลายวิธีในการนำทางแผนผังเอกสาร ตัวอย่างเช่น ในการเข้าถึงสาขาพาเรนต์ ให้ใช้คุณสมบัติ ParentNode (ประเภท XMLDOMNode) เข้าถึงสาขาย่อยผ่านคุณสมบัติ ChildNodes (ประเภท XMLDOMNodeList), FirstChild และ LastChild (ประเภท XMLDOMNode) เป็นต้น คุณสมบัติ OwnerDocument ส่งกลับวัตถุ XMLDOMDocument ที่ระบุเอกสาร XML เอง คุณสมบัติที่แสดงด้านบนทำให้ง่ายต่อการสำรวจโครงสร้างเอกสาร</p> <p>ตอนนี้ เรามาวนซ้ำทุกสาขาของเอกสาร XML:</p><p>ราก: = XMLDoc.DocumentElement; สำหรับฉัน: = 0 ถึง Root.ChildNodes.Length-1 ทำ Begin Node: = Root.ChildNodes.Item [I]; ถ้า Node.HasChildNodes แล้ว GetChilds (โหนด, 0); จบ;</p><p>ดังที่กล่าวไว้ข้างต้น SelectNodes ของอ็อบเจ็กต์ XMLDOMNode ให้วิธีที่ยืดหยุ่นมากขึ้นในการเข้าถึงสาขาของเอกสาร นอกจากนี้ยังมีเมธอด SelectSingleNode ที่ส่งคืนเฉพาะสาขาแรกของเอกสาร ทั้งสองวิธีนี้อนุญาตให้คุณกำหนดเทมเพลต XSL สำหรับการค้นหาสาขา</p> <p>มาดูขั้นตอนการใช้วิธี SelectNodes เพื่อดึงสาขาทั้งหมดที่มีสาขาซีดีและสาขาย่อย PRICE:</p><p>ราก: = XMLDoc.DocumentElement; โหนด: = Root.SelectNodes ('CD / PRICE');</p><p>สาขาย่อย PRICE ทั้งหมดของสาขาซีดีจะอยู่ในคอลเล็กชันโหนด เราจะกลับมาพูดถึงเทมเพลต 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: IXMLDOMDocument; ราก: IXMLDOMNode; โหนด: IXMLDOMNode; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = เท็จ; XMLDoc.Load ('C: \ DATA \ DATA.xml'); // รับองค์ประกอบราก ราก: = XMLDoc.DocumentElement; โหนด: = รูท; // ลบโหนดย่อยสาขาแรก Node.RemoveChild (Node.FirstChild);</p><p>โปรดทราบว่าในตัวอย่างนี้ เรากำลังลบสาขาย่อยแรก วิธีลบองค์ประกอบแรกของสาขาย่อยแรกแสดงด้านล่าง:</p><p>Var XMLDoc: IXMLDOMDocument; ราก: IXMLDOMNode; โหนด: IXMLDOMNode; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = เท็จ; XMLDoc.Load ('C: \ DATA \ DATA.xml'); // รับองค์ประกอบราก ราก: = XMLDoc.DocumentElement; // และโหนดย่อยของโหนดย่อย: = Root.FirstChild; // ลบโหนดย่อยสาขาแรก Node.RemoveChild (Node.FirstChild);</p><p>ในตัวอย่างข้างต้น เราไม่ได้ลบสาขาแรกออก <CD>…</CD>และองค์ประกอบแรกของกิ่งคือ <TITLE>….

ตอนนี้ขอเพิ่มสาขาใหม่ ด้านล่างนี้คือรหัสที่แสดงวิธีการเพิ่มรายการซีดีรอมเพลงใหม่:

Var NewNode: IXMLDOMNode; ลูก: IXMLDOMNode; ... // สร้างสาขาใหม่ - NewNode: = XMLDoc.CreateNode (1, 'ซีดี', ''); // เพิ่มองค์ประกอบ ลูก: = XMLDoc.CreateNode (1, 'TITLE', ''); // เพิ่มองค์ประกอบ NewNode.AppendChild (ลูก); // และตั้งค่า Child.Text: = 'Pink Floyd'; // เพิ่มองค์ประกอบ <ARTIST>ลูก: = XMLDoc.CreateNode (1, 'ศิลปิน', ''); // เพิ่มองค์ประกอบ NewNode.AppendChild (ลูก); // และตั้งค่า Child.Text: = 'Division Bell'; // เพิ่มองค์ประกอบ <COUNTRY>ลูก: = XMLDoc.CreateNode (1, 'ประเทศ', ''); // เพิ่มองค์ประกอบ NewNode.AppendChild (ลูก); // และตั้งค่า Child.Text: = 'UK'; // เพิ่มองค์ประกอบ <COMPANY>ลูก: = XMLDoc.CreateNode (1, 'บริษัท', ''); // เพิ่มองค์ประกอบ NewNode.AppendChild (ลูก); // และตั้งค่า Child.Text: = 'EMI Records Ltd.'; // เพิ่มองค์ประกอบ <PRICE>ลูก: = XMLDoc.CreateNode (1, 'PRICE', ''); // เพิ่มองค์ประกอบ NewNode.AppendChild (ลูก); // และตั้งค่า Child.Text: = '11 .99 "; // เพิ่มองค์ประกอบ <YEAR>ลูก: = XMLDoc.CreateNode (1, 'ปี', ''); // เพิ่มองค์ประกอบ NewNode.AppendChild (ลูก); // และตั้งค่า Child.Text: = '1994'; // และเพิ่มสาขา Root.AppendChild (NewNode); ...</p><p>รหัสด้านบนแสดงลำดับขั้นตอนต่อไปนี้เพื่อเพิ่มสาขาใหม่:</p> <ul><li>การสร้างสาขาใหม่โดยใช้วิธี CreateNode: <ul><li>การสร้างองค์ประกอบโดยใช้เมธอด CreateNode</li> <li>การเพิ่มองค์ประกอบไปยังสาขาโดยใช้วิธี AppendChild</li> <li>การตั้งค่าองค์ประกอบผ่านคุณสมบัติข้อความ;</li> <li>… ทำซ้ำสำหรับองค์ประกอบทั้งหมด</li> </ul></li> <li>การเพิ่มสาขาใหม่ให้กับเอกสารโดยใช้วิธี AppendChild</li> </ul><p>จำได้ว่าเมธอด AppendChild เพิ่มสาขาที่ส่วนท้ายของทรี ในการเพิ่มสาขาไปยังตำแหน่งเฉพาะในแผนผัง คุณต้องใช้เมธอด InsertBefore</p> <h2>ชุดสาขา - วัตถุ XMLDOMNodeList</h2> <p>ออบเจ็กต์ XMLNodeList ประกอบด้วยรายการของสาขา ซึ่งสามารถสร้างได้โดยใช้เมธอด SelectNodes หรือ GetElementsByTagName และยังได้มาจากคุณสมบัติ ChildNodes</p> <p>เราได้กล่าวถึงการใช้วัตถุนี้ในตัวอย่างที่ให้ไว้ในส่วน "การนำทางแผนผังเอกสาร" ที่นี่เราจะให้ข้อคิดเห็นเชิงทฤษฎี</p> <p>จำนวนสาขาในรายการสามารถรับได้เป็นค่าของคุณสมบัติ Length แบรนช์ถูกสร้างดัชนีจาก 0 ถึง Length-1 และแต่ละแบรนช์สามารถเข้าถึงได้ผ่านไอเท็มที่จัดทำดัชนีที่สอดคล้องกันในอาร์เรย์ไอเท็ม</p> <p>การนำทางผ่านรายการสาขาสามารถทำได้โดยใช้วิธี NextNode ซึ่งจะส่งคืนสาขาถัดไปในรายการ หรือไม่มีเลยหากสาขาปัจจุบันเป็นสาขาสุดท้าย หากต้องการกลับไปที่ด้านบนสุดของรายการ ให้เรียกวิธีการรีเซ็ต</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: IXMLDOMDocument; ราก: IXMLDOMNode; โหนด: IXMLDOMNode; S: WideString; ... ส: = ‘ <CATALOG></CATALOG>'; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = เท็จ; XMLDoc.LoadXML (S); ราก: = XMLDoc.DocumentElement; โหนด: = XMLDoc.CreateNode (1, 'ซีดี', ''); Root.AppendChild (โหนด); Memo1.Lines.Add (XMLDoc.XML); ... XMLDoc: = ไม่มี;</p><p>หลังจากสร้างเอกสาร XML แล้ว ให้บันทึกลงในไฟล์โดยใช้วิธีการบันทึก ตัวอย่างเช่น:</p> <p>XMLDoc.Save ('C: \ DATA \ NEWCD.XML');</p> <p>นอกจากการบันทึกลงในไฟล์แล้ว วิธีบันทึกยังช่วยให้คุณบันทึกเอกสาร XML ในอ็อบเจ็กต์ XMLDOMDocument ใหม่ได้อีกด้วย ในกรณีนี้ เอกสารจะได้รับการประมวลผลอย่างสมบูรณ์ และด้วยเหตุนี้จึงมีการตรวจสอบโครงสร้างและไวยากรณ์ของเอกสาร วิธีบันทึกเอกสารไปยังวัตถุอื่นมีดังนี้</p><p>ขั้นตอน TForm1.Button2Click (ผู้ส่ง: TObject); var XMLDoc2: IXMLDOMDocument; เริ่ม XMLDoc2: = CoDOMDocument.Create; XMLDoc.Save (XMLDoc2); Memo2.Lines.Add (XMLDoc2.XML); ... XMLDoc2: = ไม่มี; จบ;</p><p>โดยสรุป วิธีการบันทึกยังช่วยให้คุณสามารถบันทึกเอกสาร XML ไปยังวัตถุ COM อื่น ๆ ที่สนับสนุนอินเทอร์เฟซ IStream, IPersistStream หรือ IPersistStreamInit</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>การใช้เทมเพลต XSL</h2> <p>เมื่อพูดถึงเมธอด SelectNodes ของอ็อบเจ็กต์ XMLDOMNode เรากล่าวว่าวิธีนี้ให้วิธีที่ยืดหยุ่นกว่าในการเข้าถึงสาขาของเอกสาร ความยืดหยุ่นคือคุณสามารถระบุเทมเพลต XSL เป็นเกณฑ์ในการเลือกสาขาได้ เทมเพลตดังกล่าวมีกลไกที่มีประสิทธิภาพในการค้นหาข้อมูลในเอกสาร XML ตัวอย่างเช่น หากต้องการรับรายชื่อชื่อซีดีรอมเพลงทั้งหมดในไดเรกทอรีของเรา คุณสามารถเรียกใช้แบบสอบถามต่อไปนี้:</p><p>หากต้องการทราบว่าแผ่นดิสก์ของศิลปินรายใดบ้างที่ออกจำหน่ายในสหรัฐอเมริกา คำขอมีดังต่อไปนี้:</p><p>โหนด: = Root.SelectNodes ('ซีดี / ศิลปิน');</p><p>วิธีค้นหาไดรฟ์แรกในไดเรกทอรีมีดังนี้</p><p>โหนด: = Root.SelectNodes ('CD / TITLE');</p><p>และสุดท้าย:</p><p>โหนด: = Root.SelectNodes ('CD / TITLE');</p><p>ในการค้นหาดิสก์ของ Bob Dylan คุณสามารถเรียกใช้แบบสอบถามต่อไปนี้:</p><p>โหนด: = Root.SelectNodes ('CD [$ ใด ๆ $ ARTIST =” Bob Dylan ”] / TITLE');</p><p>และเพื่อให้ได้รายการดิสก์ที่สร้างขึ้นหลังปี 1985 เราเรียกใช้แบบสอบถามต่อไปนี้:</p><p>โหนด: = Root.SelectNodes ('CD / TITLE');</p><p>การอภิปรายโดยละเอียดเกี่ยวกับไวยากรณ์ XSL ต้องมีการเผยแพร่แยกต่างหาก เพื่อให้ผู้อ่านสนใจและสนับสนุนให้มีการวิจัยเพิ่มเติม ฉันจะยกตัวอย่างเพียงตัวอย่างเล็กๆ น้อยๆ ของการใช้ XSL ที่เป็นไปได้ สมมติว่าเราจำเป็นต้องแปลงแคตตาล็อกของเราเป็นตาราง HTML ปกติ โดยใช้วิธีการดั้งเดิม เราต้องวนซ้ำทุกกิ่งก้านของต้นไม้และสำหรับองค์ประกอบที่ได้รับแต่ละรายการจะสร้างแท็กที่สอดคล้องกัน <TD>…</TD>.</p> <p>เมื่อใช้ XSL เราเพียงแค่สร้างเทมเพลต (หรือสไตล์ชีต) ที่ระบุสิ่งที่จะแปลงและวิธี จากนั้นเราก็วางเทมเพลตนี้ลงในแค็ตตาล็อกของเรา - เท่านี้ก็เรียบร้อย เรามีข้อความของเทมเพลต XSL ที่เปลี่ยนแค็ตตาล็อกให้เป็นตาราง (รายการที่ 2)</p> <p>โค้ดสำหรับวางทับเทมเพลต XSL ในไดเร็กทอรีของเรามีลักษณะดังนี้:</p><p>ขั้นตอน TForm1.Button2Click (ผู้ส่ง: TObject); var XSLDoc: IXMLDOMDocument; เริ่ม XSLDoc: = CoDOMDocument.Create; XSLDoc.Load ('C: \ DATA \ DATA.xsl'); Memo2.Text: = XMLDoc.TransformNode (XSLDoc); XSLDoc: = ไม่มี; จบ;</p><p>ในการสรุปการสนทนาของเราเกี่ยวกับ XSL ควรจะกล่าวว่าในปัจจุบันภาษานี้ถูกใช้อย่างแข็งขันสำหรับการแปลงระหว่างเอกสาร XML ต่างๆ เช่นเดียวกับการจัดรูปแบบเอกสาร</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>บทสรุป</h2> <p>ด้วยเหตุผลที่ชัดเจน จึงเป็นไปไม่ได้ที่จะครอบคลุมออบเจ็กต์ Microsoft XML DOM ทั้งหมดและให้ตัวอย่างการใช้งานในบทความเดียว เราเพิ่งพูดถึงประเด็นพื้นฐานของการใช้ XML DOM ในแอปพลิเคชัน ตาราง 3 แสดงวัตถุทั้งหมดที่นำมาใช้ใน Microsoft XML DOM</p> <p>คอมพิวเตอร์กด 12 "2000</p> <p>สำหรับโปรแกรมเมอร์ Delphi หลายๆ คน การตั้งค่าการบันทึกเกี่ยวข้องกับการใช้ <i>INI</i>ไฟล์ในโปรแกรมของพวกเขา ควรหลีกเลี่ยงการใช้วิธีนี้ในโปรเจ็กต์ที่จริงจังไม่มากก็น้อย เนื่องจากวิธีนี้จะจำกัดความยืดหยุ่น ซึ่งจะป้องกันไม่ให้มีการขยายโปรแกรมออกไปอีก ควรกล่าวว่าวิธีการนี้ค่อนข้างเป็นที่นิยมเนื่องจากใช้งานง่ายและมีเครื่องมือในตัวในสภาพแวดล้อมการพัฒนา <br><br>อย่างไรก็ตาม โครงสร้าง <i>XML</i>ไฟล์. ข้อได้เปรียบของพวกเขาคือไม่สามารถกำหนดจำนวนพารามิเตอร์ได้ เพื่อให้เข้าใจสิ่งนี้ดีขึ้น ให้พิจารณาตัวอย่างเฉพาะ</p><p>ในโปรแกรม USearch เมื่อคุณคลิกที่รายการ เมนูบริบทจะปรากฏขึ้น ซึ่งจะแสดงรายการ รายการเหล่านี้เป็นคำสั่ง ซึ่งจะถูกโหลดจากไฟล์การตั้งค่า ในกรณีที่การตั้งค่าถูกเก็บไว้ใน <i>INI</i>จากนั้นโปรแกรมสามารถบันทึกและโหลดคำสั่งจำนวนหนึ่งได้ เช่น 10 หรือ 50 คำสั่ง ทันทีที่ต้องการค่าที่มากขึ้น คุณจะต้องเขียนโค้ดใหม่และคอมไพล์ใหม่ตามนั้น</p><p><img src='https://i2.wp.com/zoo-mania.ru/wp-content/uploads/2011/08/settings.ini_.jpg' height="145" width="247" loading=lazy loading=lazy><br>การใช้แนวทางโดยใช้ <i>XML</i>ไฟล์ เราจะสามารถโหลดพารามิเตอร์ของส่วนทั้งหมดไดนามิก นอกจากนี้ ไฟล์คอนฟิกูเรชันจะดูสวยงามยิ่งขึ้น โดยไม่มีการกำหนดหมายเลขพารามิเตอร์ซ้ำซ้อน อย่างไรก็ตาม เครื่องมือมาตรฐานในการทำงานกับ <i>XML</i> Delphi มีข้อเสียมากมาย ฉันจึงแนะนำให้ใช้ไลบรารี่มาตรฐาน <b>MSXML</b>... โดยปกติแล้วจะรวมอยู่ในระบบปฏิบัติการของตระกูล Windows ตามค่าเริ่มต้น</p><p><img src='https://i1.wp.com/zoo-mania.ru/wp-content/uploads/2011/08/settings.xml_.jpg' align="center" width="100%" loading=lazy loading=lazy><br>หากต้องการเชื่อมต่อกับ <b>MSXML</b>เราจำเป็นต้องสร้างไฟล์อินเทอร์เฟซพร้อมรายการฟังก์ชันทั้งหมดโดยนำเข้าจากเซิร์ฟเวอร์ COM มีการเขียนบทความที่มีรายละเอียดมากมายเกี่ยวกับวิธีการนำเข้าอินเทอร์เฟซ แต่ฉันแนะนำให้คุณดาวน์โหลดไฟล์ <b>MSXML2_TLB.PAS</b>พร้อมใช้. หลังจากที่ดาวน์โหลดไฟล์แล้ว ให้วางไว้ข้างโปรเจ็กต์ของคุณ หรือวางลงในโฟลเดอร์ lib ของสภาพแวดล้อม Delphi ดังนั้นโปรแกรมที่สร้างขึ้นทั้งหมดจะสามารถใช้โมดูลได้ <b>MSXML</b>คุณเพียงแค่ต้องเพิ่มบรรทัด MSXML2_TLB เพื่อใช้งาน</p><p>เพื่อความชัดเจน ให้พิจารณาตัวอย่างต่อไปนี้ของการใช้ไลบรารีนี้:</p><p>ขั้นตอน LoadData; var XMLDoc: DOMDocument; ราก: IXMLDOMEองค์ประกอบ; เริ่ม XMLDoc: = CoDOMDocument.Create; XMLDoc.Load ("settins.xml"); ราก: = XMLDoc.DocumentElement; ShowMessage (Root.SelectSingleNode ("ขนาด / ความกว้าง") ข้อความ); ราก: = ไม่มี; XMLDoc: = ไม่มี; จบ;</p><p>ขั้นแรก อินสแตนซ์ของคลาส DOMDocument จะถูกสร้างขึ้น จากนั้นเนื้อหาของไฟล์ settings.xml จะถูกโหลดลงในหน่วยความจำ เนื่องจากตามมาตรฐานใด ๆ <i>XML</i>ไฟล์จะต้องมีแท็กรูท (ในกรณีนี้ <i>config</i>) จากนั้นเราต้องรับมันโดยใช้ฟังก์ชั่น <i>เอกสารองค์ประกอบ</i>... จากนั้นเนื้อหาจะแสดงระหว่างแท็ก <width></width>ซึ่งอยู่ระหว่างแท็ก <size></size>... ดังนั้น จากไฟล์ settings.xml วิธีการของเราจะแสดงข้อความใน MessageBox <i>"100px"</i>.</p><p> <?xml version="1.0" encoding="utf-8"?> <config> <size> <height>500px</height> <width>100px</width> </size> </config> </p><p>ที่นี่ใช้เมธอด SelectSingleNode ซึ่งรับสตริงเป็นพารามิเตอร์</p> <p>สั่งซื้อวิธีแก้ปัญหาบน DELPHI <br>Delphi เป็นภาษาการเขียนโปรแกรมที่สำคัญที่สุดอันดับสองที่นักเรียนมักได้รับการแนะนำให้รู้จักในกระบวนการเรียนรู้ นี่คือจุดเริ่มต้นของการเรียนรู้เกี่ยวกับการเขียนโปรแกรมเชิงวัตถุ ในฐานะนักเรียน ฉันได้ข้อสรุปว่าไม่มีวิธีใดในการเรียนรู้ภาษาใดง่ายไปกว่าการเขียนเครื่องคิดเลข แม้ว่าคุณจะใช้ฟังก์ชันพื้นฐานสำหรับการบวกตัวเลขสองตัว มันก็จะให้ความกระจ่างขึ้นอย่างมาก</p> <p>CodeGaear, Delphi 7, Lazarus เป็นคอมไพเลอร์ที่แตกต่างกัน โปรแกรมที่จะถ่ายโอนรหัสที่คุณเขียนไปยังเครื่อง แปลงเป็นอันหนึ่งอันเดียวกัน ทั้งหมดนี้คือโปรแกรมสำหรับสร้างโปรแกรม ไม่ใช่ภาษาโปรแกรมแยกต่างหาก คอมไพเลอร์เหล่านี้ใช้ภาษาการเขียนโปรแกรม Object Pascal ซึ่งเป็นพื้นฐานของภาษา Delphi ซึ่งคล้ายกับไวยากรณ์ของ Pascal ปกติ แต่การใช้งานแตกต่างกันอย่างมาก <br></p> <h2>ไวยากรณ์ของภาษาโปรแกรมคืออะไร?</h2> <p>นี่คือรูปแบบการเขียนโอเปอเรเตอร์ต่างๆ ตัวอย่างเช่น ลูป Pascal "for" มีรูปแบบดังนี้: "for n: = 1 to k do" เป็นต้น</p><p>ในภาษาการเขียนโปรแกรม C ++ ลูปเดียวกันเขียนต่างกันเล็กน้อย: for (n = 1; n เราเขียนเครื่องคิดเลข</p><p>สิ่งนี้จะช่วยให้คุณเข้าใจว่าอ็อบเจกต์โต้ตอบกับโค้ดโปรแกรมอย่างไร "ตัวแปร" คืออะไร และฟังก์ชันทางคณิตศาสตร์ทำงานอย่างไร การเขียนโปรแกรมใด ๆ จะเป็นการคำนวณอยู่ดี เกมยังเป็นโปรแกรมที่คำนวณบางสิ่งอย่างต่อเนื่อง ทำงานกับตัวเลขและฟังก์ชันตัวเลข การเขียนโปรแกรมแยกออกจากคณิตศาสตร์ไม่ได้</p> <p>ลองใช้สภาพแวดล้อมการพัฒนาลาซารัสในการเขียน ฟังก์ชันการทำงานไม่ได้สมบูรณ์เท่ากับ CodeGear แต่ใช้งานได้ฟรีและมีไว้สำหรับการฝึกอบรม</p><p>เมื่อเปิดสภาพแวดล้อมการพัฒนา เราจะเห็นแบบฟอร์มและกล่องเครื่องมือ นี่คือแบบฟอร์ม</p> <p><img src='https://i2.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-24.jpg' width="100%" loading=lazy loading=lazy></p><p>นี่คือกล่องเครื่องมือ</p><p>สิ่งแรกที่เราจะทำคือเพิ่มองค์ประกอบสามอย่างที่เราจำเป็นต้องใช้ฟังก์ชันเพื่อเพิ่มตัวเลขสองตัว เราต้องการ: "Tedit" จำนวนสามชิ้นและ "TButton" ในภาพด้านล่างจะแสดงบนแผงที่มีลูกศร เราคลิกที่พวกเขาหนึ่งครั้งแล้วคลิกอีกครั้งบนแบบฟอร์มและปรากฏบนนั้น</p><p>เหล่านี้เป็นฟิลด์ข้อความสำหรับป้อนข้อมูลและปุ่มปกติ คุณพบองค์ประกอบเหล่านี้โดยใช้โปรแกรม Windows เกือบทุกโปรแกรม ลองดูสิ.</p><p><img src='https://i2.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-27.jpg' width="100%" loading=lazy loading=lazy><br></p> <p>มาทำความสะอาดป้ายกำกับเหล่านี้กัน คลิกแท็บ "ดู" และคลิกที่รายการ "ตัวตรวจสอบวัตถุ หน้าต่างแบบนี้จะปรากฏขึ้น</p><p><img src='https://i1.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-28.jpg' width="100%" loading=lazy loading=lazy></p><p>เราคลิกหนึ่งครั้งที่องค์ประกอบ "ปุ่ม" บนแบบฟอร์ม และเปลี่ยนค่า "คำอธิบายภาพ" ในหน้าต่างตัวตรวจสอบเป็นค่าอื่น ตัวอย่างเช่น คำว่า "ตกลง" เรากด Enter เราเห็นในแบบฟอร์มว่าองค์ประกอบเปลี่ยนชื่ออย่างไร</p><p>เราจะทำเช่นเดียวกันกับ Edit's เพียงแต่เราจะไม่เปลี่ยนชื่อ แต่เราจะทำให้ไม่มีเนื้อหาใด ๆ เลือกและล้างค่าข้อความในตัวตรวจสอบ อย่าลืมกด Enter</p><p><img src='https://i1.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-29.jpg' width="100%" loading=lazy loading=lazy></p><p>ส่งผลให้รูปร่างของเราเป็นแบบนี้</p><p><img src='https://i1.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-30.jpg' width="100%" loading=lazy loading=lazy><br></p> <p>ตอนนี้ เพื่อให้เครื่องคิดเลขของเราทำงานได้ คุณต้องเขียนรหัสโปรแกรมที่จำเป็นสำหรับขั้นตอนการทำงานของปุ่มของเรา คลิกที่องค์ประกอบปุ่มสองครั้งและเปิดตัวแก้ไขแหล่งที่มา</p><p><img src='https://i2.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-31.jpg' width="100%" loading=lazy loading=lazy></p><p>ดู? ขั้นตอน Button1Click นี่เป็นขั้นตอนที่รับผิดชอบต่อสิ่งที่เกิดขึ้นเมื่อเราคลิกที่ปุ่มหนึ่งครั้ง และสิ่งต่อไปนี้ควรเกิดขึ้น: โปรแกรมต้องแสดงผลรวมของตัวเลขที่ป้อนในสองฟิลด์แรกในการแก้ไขครั้งที่สาม เราเขียนรหัส</p><p><img src='https://i1.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-32.jpg' width="100%" loading=lazy loading=lazy></p><p>เราต้องเขียนโค้ดง่ายๆ 5 บรรทัด ความคิดเห็นและคำอธิบายสามารถเห็นได้ในภาพด้านบน หลังจากนั้นเรากดปุ่มนี้</p> <p>โครงการของเราจะรวบรวม จะถูกรวบรวมเป็นโปรแกรม เราป้อนตัวเลขในสองฟิลด์แรกคลิกที่ปุ่มและรับค่าของผลรวม</p><p><img src='https://i0.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-34-2.jpg' width="100%" loading=lazy loading=lazy></p> <h2>บทสรุป</h2> <p>คุณสามารถคลิกปุ่ม "ไฟล์" จากนั้น "บันทึกทั้งหมด" เลือกโฟลเดอร์ที่จะบันทึก และคุณจะมีโปรแกรมเต็มรูปแบบที่สามารถเปิดใช้งานได้จากเดสก์ท็อป ตอนนี้พยายามหาคำตอบด้วยตัวเองว่าคุณต้องเขียนโค้ดนี้อย่างไรเพื่อที่โปรแกรมจะหารตัวเลขสองตัวและไม่บวกกัน คำแนะนำ: คุณต้องเปลี่ยนประเภทข้อมูล วิดีโอด้านล่างแสดงตัวอย่างที่คล้ายกัน แต่ในสภาพแวดล้อม Delphi 7 ไม่ใช่ Lazarus</p><p><span class="6qR5tjJKK3g"></span></p> <p>เมื่อเร็ว ๆ นี้ได้รับความสนใจอย่างมากในการสร้างระบบ e-business หรือที่เรียกว่า B2B (ธุรกิจต่อธุรกิจ) พิจารณาข้อเสนอแนะเกี่ยวกับการสร้างระบบสตรีมมิ่งแลกเปลี่ยนของหน่วยงานประสานงานของเทคโนโลยีอินเทอร์เน็ต - WWW Consortium: เน้นที่เทคโนโลยี XML และการสร้างระบบสำหรับการแลกเปลี่ยนเอกสาร XML</p> <p>ข้อดีของการใช้ XML ใน e-business คือระบบ B2B ที่มีประสิทธิภาพสูงในต้นทุนต่ำสำหรับการสร้าง เนื่องจากการนำเสนอข้อมูลที่มีโครงสร้างที่ชัดเจนและเห็นภาพ ความสามารถในการใช้โปรโตคอลเครือข่ายที่ทันสมัย ​​และสร้างระบบธุรกิจแบบเรียลไทม์</p> <p>ความเป็นอิสระของการนำเสนอข้อมูลในรูปแบบของเอกสาร XML ช่วยให้บริษัทต่างๆ ที่เกี่ยวข้องกับ e-business สามารถผลิตซอฟต์แวร์ได้อย่างอิสระ</p> <p>ในทุกระบบ การแลกเปลี่ยนตามกฎจะถูกสร้างขึ้นตามรูปแบบเดียวกัน โดยใช้คำขอ HTTP SSL ถูกใช้เป็นโปรโตคอลการรักษาความปลอดภัยของข้อมูล (แต่นี่เป็นหัวข้อแยกต่างหาก)</p> <p>หนึ่งในตัวเลือกที่เป็นไปได้สำหรับการประมวลผลข้อความ XML คือการสร้างแอปพลิเคชัน BIN / CGI (ISAPI) หรือส่วนประกอบ COM (เซิร์ฟเวอร์) ที่สร้างหรือประมวลผลเอกสาร XML</p> <p>ในอีกด้านหนึ่ง แอปพลิเคชันทำหน้าที่เป็นไคลเอนต์ ซึ่งออกคำขอ HTTP ในโหมด POST ในทางกลับกัน มีเว็บเซิร์ฟเวอร์ที่ด้านที่มีการประมวลผลคำขอและมีการตอบกลับ การแลกเปลี่ยนข้อมูลใช้เอกสาร XML</p> <p>หนึ่งในตัวเลือกการใช้งานที่มีประสิทธิภาพมากที่สุดคือการใช้ตัวแยกวิเคราะห์ XML ที่มีอยู่ซึ่งสนับสนุนโมเดล DOM parser ดังกล่าวเป็นแพ็คเกจการแจกจ่ายของ Win'98 หรือเป็นส่วนสำคัญของ IE 4.7 และสูงกว่า (สำหรับ Win'95) และแสดงถึงเซิร์ฟเวอร์ COM ที่อยู่ในไลบรารี msxml.dll</p> <p>Component Object Model (COM) - แสดงถึงข้อมูลและเมธอดที่ห่อหุ้มไว้ในเอนทิตีเดียว และวิธีการเข้าถึงผ่านระบบอินเทอร์เฟซ การใช้เครื่องมือ Delphi ทำให้ง่ายต่อการเข้าถึงคลาสของวัตถุ COM (สามารถรวมหลายคลาสในเซิร์ฟเวอร์ COM เดียว) อ็อบเจ็กต์เข้าถึงได้โดยการเริ่มต้นอินสแตนซ์ของคลาสผ่านระบบอินเทอร์เฟซ คำอธิบายของอินเทอร์เฟซดำเนินการโดยภาษาข้อกำหนดอินเทอร์เฟซ (IDL) ซึ่งสามารถดำเนินการโดยใช้สภาพแวดล้อมโดยอัตโนมัติ</p> <p>เครื่องมือ Delphi ใช้เพื่อนำเข้าจากเซิร์ฟเวอร์ COM <i>msxml.dll</i>ไฟล์สำหรับคำอธิบายของอินเทอร์เฟซ IDL และไฟล์สำหรับคำอธิบายไบนารีของประเภทไลบรารี - TLB ถูกสร้างขึ้น การดำเนินการนี้ดำเนินการผ่านเมนูระบบ: <b>โครงการ | ประเภทไลบรารีนำเข้า:</b>(ภาพที่ 1). ถัดไป กล่องโต้ตอบจะปรากฏขึ้น (รูปที่ 2) ซึ่งคุณต้องเลือกวัตถุ COM (ในกรณีของเรา วัตถุนั้นลงทะเบียนภายใต้ชื่อ "Microsoft.XMLDom (เวอร์ชัน 2.0)") และสร้างไฟล์ TLB (ปุ่ม <b>สร้างหน่วย</b>). เมื่อใช้ไฟล์ TLB กรอบงานจะสร้างไฟล์คำอธิบายเซิร์ฟเวอร์ "Pascal" COM - MSXML_TLB.pas</p> <p>ไฟล์ MSXML_TLB.pas อธิบายอินเทอร์เฟซ ค่าคงที่ และ coclasses ทั้งหมดของเซิร์ฟเวอร์ COM</p> <p>ในการเข้าถึงวัตถุขององค์ประกอบ COM คุณต้องมีคำสั่ง <b>ใช้</b>เพิ่มชื่อไฟล์คำอธิบายไลบรารี (MSXML_TLB.pas) ด้านล่างนี้เป็นโปรแกรมอย่างง่ายที่ใช้ DOM parser msxml.dll มาตรฐาน ซึ่งโหลดเอกสาร XML และแสดงในองค์ประกอบฟิลด์ข้อความ Memo1</p> <b>ใช้</b> Windows, ข้อความ, SysUtils, คลาส, กราฟิก, การควบคุม, ฟอร์ม, ไดอะล็อก, OleServer, MSXML_TLB, StdCtrls; <b>พิมพ์</b> TForm1 = <b>ระดับ</b>(TForm) Button1: TButton; บันทึกที่ 1: TMemo; <b>ขั้นตอน</b> Button1Click (ผู้ส่ง: TObject); <b>จบ;</b> <b>var</b>แบบฟอร์ม 1: TForm1; <b>การนำไปใช้</b>($ R * .DFM) <b>ขั้นตอน</b> TForm1.Button1Click (ผู้ส่ง: Tobject); <span>// ประกาศของ soclass ของวัตถุ DOMDocument;</span> <b>var</b> coDoc: CoDOMDocument; <span>// คลาสที่สอดคล้องกับอินเทอร์เฟซ IDOMDocument;</span> <b>var</b>เอกสาร: IXMLDOMDocument; <b>เริ่ม</b> <span>// สร้างอินสแตนซ์ของวัตถุ DOMDocument</span>เอกสาร: = coDoc.Create; <span>// เรียกวิธีการโหลดของอินสแตนซ์ของวัตถุ DOMDocument</span> Doc.load ("data.xml"); <span>// เข้าถึงคุณสมบัติ xml ของอินสแตนซ์ DOMDocument</span> Memo1.Text: = Doc.xml; <b>จบ;</b> <b>จบ.</b> <h2>DOM Concept - Document Object Model</h2> <p>เอกสาร XML แต่ละรายการจะแสดงเป็นชุดของวัตถุหลายรายการ (คลาส) ด้วยความช่วยเหลือซึ่งคุณสามารถเข้าถึงองค์ประกอบแต่ละรายการ (ฟิลด์อ็อบเจ็กต์) DOM - อินเทอร์เฟซอธิบายการเข้าถึงทั้งวัตถุอย่างง่ายของประเภท DOMString หรือ CharacterData และส่วนหรือองค์ประกอบแต่ละรายการของเอกสาร XML: DOMFragmentElement, DOMNode, DOMElement</p> <p>ต่อไปนี้เป็นคุณสมบัติและวิธีการที่สำคัญที่สุดของวัตถุ XMLDOMDocument, XMLDOMNode, XMLDOMNodeList ควรสังเกตว่าวิธีการและหน้าที่ของอ็อบเจ็กต์ Document Object Model (DOM) ที่แสดงด้านล่างนี้ถูกใช้โดย Microsoft XML parser msxml.dll และค่อนข้างกว้างกว่าโมเดล DOM ที่อนุมัติโดย W3C Consortium</p> <p>สามารถอ่านคำอธิบายที่สมบูรณ์ยิ่งขึ้นของอินเทอร์เฟซวัตถุ DOM ได้ที่</p> <table cellspacing="0" cellpadding="4" width="500" border="1"><tbody><tr><td valign="top" colspan="2">XMLDOMวัตถุเอกสาร</td> </tr><tr><td valign="top" colspan="2">แสดงถึงระดับบนสุดของลำดับชั้นของออบเจ็กต์และประกอบด้วยวิธีการทำงานกับเอกสาร: การโหลด การวิเคราะห์ การสร้างองค์ประกอบ คุณลักษณะ ข้อคิดเห็น ฯลฯ ...</td> </tr><tr><td valign="top" colspan="2"><b>คุณสมบัติ</b> </td> </tr><tr><td valign="top" width="39%"><b>อะซิงโครนัส</b> </td> <td valign="top" width="61%">คุณสมบัติระบุโหมดการประมวลผลปัจจุบัน</td> </tr><tr><td valign="top" width="39%" height="19"><b>ParseError</b> </td> <td valign="top" width="61%" height="19">ส่งกลับการอ้างอิงไปยังข้อผิดพลาดการจัดการ XMLDOMparseError การจัดการวัตถุ</td> </tr><tr><td valign="top" width="39%"><b>เปิดใช้งาน - ปิดใช้งานการตรวจสอบเอกสาร</b> </td> <td> </td> </tr><tr><td valign="top" width="39%"><b>url</b> </td> <td valign="top" width="61%">ส่งกลับ URL ของเอกสาร</td> </tr><tr><td valign="top" width="39%"><b>เอกสารองค์ประกอบ</b> </td> <td valign="top" width="61%">มีการอ้างอิงถึงองค์ประกอบรูทของเอกสารเป็นอ็อบเจ็กต์ XMLDOMElement</td> </tr><tr><td valign="top" colspan="2"><b>วิธีการ</b> </td> </tr><tr><td valign="top" width="39%"><b>โหลด (url) <br>loadXML (xmlString)</b> </td> <td valign="top" width="61%">โหลดเอกสาร XML</td> </tr><tr><td valign="top" width="39%"><b>บันทึก (objTarget)</b> </td> <td valign="top" width="61%">บันทึกเอกสาร XML ลงในไฟล์</td> </tr><tr><td valign="top" width="39%"><b>ยกเลิก</b> </td> <td valign="top" width="61%">การหยุดชะงักของกระบวนการโหลดและประมวลผลเอกสาร</td> </tr><tr><td valign="top" width="39%"><b>createAttribute (ชื่อ)</b> </td> <td valign="top" width="61%">สร้างแอตทริบิวต์ใหม่ด้วยชื่อที่ระบุสำหรับองค์ประกอบปัจจุบัน</td> </tr><tr><td valign="top" width="39%"><b>createNode (ชนิด, ชื่อ, nameSpaceURI)</b> </td> <td valign="top" width="61%">สร้างโหนดของประเภทและชื่อที่ระบุ</td> </tr><tr><td valign="top" width="39%"><b>createElement (ชื่อแท็ก)</b> </td> <td valign="top" width="61%">สร้างองค์ประกอบเอกสารที่มีชื่อที่ระบุ</td> </tr><tr><td valign="top" width="39%"><b>createTextNode (ข้อมูล)</b> </td> <td valign="top" width="61%">สร้างข้อความภายในเอกสาร</td> </tr><tr><td valign="top" width="39%"><b>getElementsByTagName (ชื่อแท็ก)</b> </td> <td valign="top" width="61%">ส่งกลับการอ้างอิงไปยังคอลเลกชันขององค์ประกอบเอกสารที่มีชื่อที่กำหนด</td> </tr><tr><td valign="top" width="39%"><b>nodeFromID (idString)</b> </td> <td valign="top" width="61%">ค้นหาองค์ประกอบตาม ID</td> </tr></tbody></table><br><table cellspacing="0" cellpadding="4" width="500" border="1"><tbody><tr><td valign="top" colspan="2"> <b>XMLDOMNode วัตถุ</b> </td> </tr><tr><td valign="top" colspan="2">ออบเจ็กต์ XMLDOMNode ที่ใช้อินเทอร์เฟซ DOM พื้นฐาน <b>โหนด</b>มีไว้สำหรับจัดการกับโหนดที่แยกจากกันของแผนผังเอกสาร คุณสมบัติและวิธีการช่วยให้คุณได้รับและเปลี่ยนแปลงข้อมูลทั้งหมดเกี่ยวกับโหนดปัจจุบัน - ประเภท, ชื่อ, ชื่อเต็ม, เนื้อหา, รายการองค์ประกอบย่อย ฯลฯ</td> </tr><tr><td valign="top" colspan="2"><b>คุณสมบัติ</b> </td> </tr><tr><td valign="top" width=" "><b>nodeName, ชื่อฐาน</b> </td> <td valign="top" width="65%">ส่งกลับชื่อของโหนดปัจจุบัน</td> </tr><tr><td valign="top" width="35%"><b>คำนำหน้า</b> </td> <td valign="top" width="65%">ส่งกลับคำนำหน้าเนมสเปซ</td> </tr><tr><td valign="top" width="35%"><b>ประเภทข้อมูล</b> </td> <td valign="top" width="65%">ระบุประเภทเนื้อหาของโหนดปัจจุบัน</td> </tr><tr><td valign="top" width="35%"><b>nodeType, nodeTypeString</b> </td> <td valign="top" width="65%">ส่งกลับประเภทของโหนดปัจจุบัน:</td> </tr><tr><td valign="top" width="35%"><b>คุณลักษณะ</b> </td> <td valign="top" width="65%">รับรายการแอ็ตทริบิวต์ของโหนดปัจจุบันเป็นคอลเล็กชัน XMLDOMNamedNodeMap</td> </tr><tr><td valign="top" width="35%"><b>ข้อความ</b> </td> <td valign="top" width="65%">ส่งกลับเนื้อหาของทรีย่อยปัจจุบันเป็นข้อความ</td> </tr><tr><td valign="top" width="35%"><b>xml</b> </td> <td valign="top" width="65%">ส่งกลับการแสดง XML ของทรีย่อยปัจจุบัน</td> </tr><tr><td valign="top" width="35%"><b>nodeValue</b> </td> <td valign="top" width="65%">ส่งกลับเนื้อหาของโหนดปัจจุบัน</td> </tr><tr><td valign="top" width="35%"><b>ลูกโหนด</b> </td> <td valign="top" width="65%">ส่งคืนรายการองค์ประกอบย่อยเป็น XMLDOMNodeList</td> </tr><tr><td valign="top" width="35%"><b>ลูกคนแรก ลูกคนสุดท้าย</b> </td> <td valign="top" width="65%">ส่งกลับลูกคนแรก / คนสุดท้าย</td> </tr><tr><td valign="top" width="35%"><b>ก่อนหน้าพี่น้อง ต่อไปพี่น้อง</b> </td> <td valign="top" width="65%">คืนค่าพี่น้องก่อนหน้า / ถัดไป</td> </tr><tr><td valign="top" width="35%"><b>parentNode</b> </td> <td valign="top" width="65%">มีลิงก์ไปยังองค์ประกอบหลัก</td> </tr><tr><td valign="top" width="35%"><b>เจ้าของเอกสาร</b> </td> <td valign="top" width="65%">ส่งกลับตัวชี้ไปยังเอกสารที่มีโหนดปัจจุบัน</td> </tr><tr><td valign="top" colspan="2"><b>วิธีการ</b> </td> </tr><tr><td valign="top" width="35%"><b>appendChild (เด็กใหม่)</b> </td> <td valign="top" width="65%">เพิ่มชายน์ใหม่ในโหนดปัจจุบัน</td> </tr><tr><td valign="top" width="35%"><b>แทรกก่อน (newChild, refChild)</b> </td> <td valign="top" width="65%">แทรกโหนดย่อยโดยจัดตำแหน่งในทรีย่อยปัจจุบันทางด้านซ้ายของโหนดที่ระบุโดย refChild</td> </tr><tr><td valign="top" width="35%"><b>cloneNode (ลึก)</b> </td> <td valign="top" width="65%">สร้างสำเนาของรายการปัจจุบัน</td> </tr><tr><td valign="top" width="35%"><b>getAttribute</b><b>(ชื่อ) <br> </b><b>getAttributeNode</b><b><span>(ชื่อ) <br>setAttribute (ชื่อ ค่า) <br>setAttributeNode (XMLDOMattribute)</span> </b> </td> <td valign="top" width="65%">เข้าถึงแอตทริบิวต์ (สร้าง อ่าน เขียน) ของวัตถุ ชื่อคือชื่อของแอตทริบิวต์ ค่าคือค่าของมัน ส่งกลับค่าของวัตถุ XMLDOMattribute</td> </tr><tr><td valign="top" width="35%"><b>replaceChild (newChild, oldChild) removeChild (ลูกเก่า)</b> </td> <td valign="top" width="65%">การแทนที่วัตถุ oldChild ของรายการปัจจุบันของวัตถุลูกด้วย newChild กำลังลบวัตถุ oldChild</td> </tr><tr><td valign="top" width="35%"><b>selectNodes (patternString) เลือก SingleNode (patternString)</b> </td> <td valign="top" width="65%">ส่งกลับวัตถุ XMLDOMNodeList ที่เลือกโดยรูปแบบการค้นหาหรือโหนดแรก</td> </tr><tr><td valign="top" width="35%"><b>TransformerNode (สไตล์ชีต) <br>transformNodeToObject (สไตล์ชีต, outputObject)</b> </td> <td valign="top" width="65%">กำหนดสไตล์ชีตให้กับทรีย่อยของโหนดปัจจุบันและส่งคืนสตริงที่เป็นผลจากการประมวลผล พารามิเตอร์คือการอ้างอิงไปยังอ็อบเจ็กต์ DOMDocument ที่มีคำสั่ง XSL</td> </tr></tbody></table><br><h2>การใช้ XML ในธุรกิจ</h2> <p>เพื่อให้เห็นภาพชัดเจนขึ้น จำเป็นต้องมีคำอธิบาย และเหตุใดจึงต้องมีทั้งหมดนี้เพื่อให้เข้าใจถึงวิธีการทำงาน:</p> <p>เมื่อสร้าง B2B หรือระบบ ERP ขององค์กร เมื่อจัดการการแลกเปลี่ยนข้อมูลของเอกสาร XML ระหว่างองค์กรหรือสาขาของ pr-I จะใช้ระบบที่ได้รับการพิสูจน์แล้วว่ามีประสิทธิภาพในการถ่ายโอนข้อมูลตามเว็บเซิร์ฟเวอร์ที่มีอยู่ผ่านโปรโตคอล HTTP</p> <p>ในอีกด้านหนึ่ง แอปพลิเคชันทำหน้าที่เป็นไคลเอนต์ซึ่งออกคำขอ HTTP ในโหมด POST ในอีกทางหนึ่ง มีเว็บเซิร์ฟเวอร์ซึ่งด้านของการประมวลผลคำขอและมีการตอบกลับ เอกสาร XML ใช้เป็นการแลกเปลี่ยน</p> <p>ตัวอย่างเช่น ในระบบ ERP ขององค์กรอย่างง่าย โปรแกรมบัญชี (ACS Accounting) จำเป็นต้องสร้างคำขอใบแจ้งหนี้และส่งไปยังสาขาที่มีคลังสินค้า (ACS Warehouse) AWP A คำชี้แจงปัญหาที่คล้ายกันเมื่อสร้างระบบ B2B เมื่อ Enterprise A ขอความพร้อมของผลิตภัณฑ์ (ทำการสั่งซื้อ) จากซัพพลายเออร์ B.</p> <p>Enterprise A และโปรแกรมของบริษัททำหน้าที่เป็นลูกค้า คลังสินค้าให้บริการโดยซัพพลายเออร์ B ซึ่งมีคลังสินค้าพร้อมฐานข้อมูลบนเซิร์ฟเวอร์ SQL การแลกเปลี่ยนจะดำเนินการผ่านเว็บเซิร์ฟเวอร์ขององค์กรของผู้จัดหา V</p> <p>ด้านล่างนี้คืออัลกอริธึมการแลกเปลี่ยนทั่วไปดังต่อไปนี้:</p> <br>รูปที่ 3 <ol><li><b>องค์กร A</b>ผู้ริเริ่ม <b>กระบวนการ A</b>(การสั่งผลิต) ซึ่งทำหน้าที่เป็น Web Client</li><li><b>กระบวนการ A</b>สร้างเอกสาร XML (เช่น คำขอใบแจ้งหนี้) และส่งเป็นคำขอ POST http ไปยังเว็บเซิร์ฟเวอร์ของผู้ให้บริการ B ตัวระบุทรัพยากรของแอปพลิเคชันการประมวลผลจะถูกใช้เป็น URI URI สามารถเหมือนกันได้สำหรับเอกสารทุกประเภท หรือเป็นรายบุคคลสำหรับแต่ละประเภท ทุกอย่างขึ้นอยู่กับโครงสร้างของเซิร์ฟเวอร์ B2B (WEB)</li><li>เว็บเซิร์ฟเวอร์วิเคราะห์คำขอและสร้างเซิร์ฟเวอร์ <b>กระบวนการ B</b>โดยส่งเนื้อความของเอกสาร XML เป็นพารามิเตอร์ <br>เว็บเซิร์ฟเวอร์เปิดตัวกระบวนการ B และประมวลผลเป็นเพจ ASP, CGI (ISAPI) - แอปพลิเคชันหรือเซิร์ฟเวอร์ JAVA (แอปพลิเคชันเซิร์ฟเวอร์)</li><li><b>กระบวนการ B</b>- สร้างคำขอไปยังเซิร์ฟเวอร์ฐานข้อมูล SQL</li><li>เซิร์ฟเวอร์ SQL ดำเนินการที่จำเป็นในฐานข้อมูล สร้างการตอบสนองและส่งกลับ <b>กระบวนการ B</b>.</li><li>ตามการตอบสนองจากเซิร์ฟเวอร์ SQL <b>กระบวนการ B</b>สร้างเอกสาร XML (ตอบกลับ) และส่งคืนเป็นการตอบสนองต่อการร้องขอ http ไปยังแอปพลิเคชันไคลเอนต์</li><li>นอกจากนี้ ขึ้นอยู่กับสถานการณ์ในฝั่งไคลเอ็นต์ อาจมีการสร้างคำขอ http ใหม่ หรือสิ้นสุดเซสชัน</li> </ol><h2>คำสองสามคำเกี่ยวกับการจัดโฟลว์เอกสาร</h2> <p>กฎทั่วไปในการพัฒนาระบบสำหรับการแลกเปลี่ยนเอกสาร XML คือ:</p><ul><li><b>ประการแรก</b>- การพัฒนาผังงานเอกสารอิเล็กทรอนิกส์และโครงสร้าง</li><li><b>ประการที่สอง</b>- การพัฒนาตารางฟังก์ชันของกระบวนการ (กระบวนการย่อย) เช่น ฟังก์ชันใดเกี่ยวกับเอกสาร XML ที่แต่ละกระบวนการจะนำไปใช้</li> </ul><p>เอกสาร XML แต่ละรายการ เช่นเดียวกับเอกสาร HTML จะต้องประกอบด้วยส่วนหัวของข้อความ (ข้อมูลที่ปิดด้วยแท็ก) และเนื้อหาข้อความ (สำหรับคำขอ ข้อมูลนี้จะถูกใส่กรอบด้วยแท็กเพื่อตอบสนองต่อคำขอ) เพื่อให้เอกสาร XML มีรูปแบบที่ดี จำเป็นต้องจัดเฟรมสองส่วน "ชื่อ" และ "คำขอ" ด้วยแท็ก เป็นต้น ประเภทของเอกสารทั่วไปแสดงไว้ด้านล่าง:</p> <p>ส่วนหัว (รูปที่ 4) ตรงกันข้ามกับเอกสาร HTML จะต้องมีข้อมูลการบริการหลายประเภท รวมถึงข้อมูลเกี่ยวกับประเภทของเอกสารที่ส่งและขั้นตอนการประมวลผล เนื้อหาของเอกสารเข้าสู่การประมวลผลข้อมูลเช่น เนื้อหากรอบโดยแท็ก ควรสังเกตว่าโครงสร้างของหัวเรื่องควรเหมือนกันสำหรับเอกสารทุกประเภท</p> <p>สำหรับกระบวนการที่เปิดใช้งานโดยเซิร์ฟเวอร์ ดีกว่า (แต่ไม่จำเป็น) เพื่อสร้างอัลกอริธึมการประมวลผลดังต่อไปนี้:</p> <img src='https://i1.wp.com/codenet.ru/np-includes/upload/2005/01/05/128666.jpg' height="500" width="408" loading=lazy loading=lazy><br>รูปที่ 6 <h2>ประเด็นพื้นฐานบางประการในการสร้างฝั่งไคลเอ็นต์</h2> <p>ตามที่อธิบายไว้แล้ว เมื่อสร้างเอกสาร XML จะใช้การแสดงในรูปแบบ DOM ด้านล่างนี้เป็นตัวอย่างของส่วนข้อความ Delphi ของโปรแกรมสร้างส่วนหัวของข้อความ xml</p> <b>ขั้นตอน</b> TThread1.HeaderCreate (ผู้ส่ง: Tobject); <b>var</b> <span>// ประกาศคลาส จำเป็นต้องสร้าง</span> coDoc: CoDomDocument; <span>// XMLDomDocument วัตถุ</span>เอกสาร: DomDocument; r: IXMLDOMEองค์ประกอบ; โหนด: IXMLDOMEองค์ประกอบ; // DOMText txt: IXMLDOMTข้อความ; // DOMAttribute แอตทริบิวต์: IXMLDOMattribute; <b>เริ่ม</b> <span>// สร้างเอกสาร DOM</span>เอกสาร: = coDoc.Create; Doc.Set_async (เท็จ); <span>// การเริ่มต้นเริ่มต้นของเอกสาร DOM</span> Doc.LoadXML (" <Header/>"); <span>// สร้าง DOMElement (แท็ก<<b>ผู้ส่ง</b>>) </span>โหนด: = Doc.createElement ("ผู้ส่ง"); <span>// สร้างโหนดข้อความ " <b>Typhoon LLC</b>" </span> txt: = Doc.createTextNode ("Typhoon LLC"); <span>// กำหนดไปยังโหนด<<b>ผู้ส่ง</b>> ความคุ้มค่า</span> <span>// โหนดข้อความ " <b>Typhoon LLC</b>" </span> Node.appendChild (txt); <span>// เพิ่มองค์ประกอบ<<b>ผู้ส่ง</b>> ไปที่รูทเอกสารตั้งแต่ยังเด็ก</span> r.appendChild (โหนด); <span> <<b>จาก</b>> </span>โหนด: = Doc.createElement ("จาก"); txt: = Doc.createTextNode ("http://tayfun.ru/xml/default.asp"); Node.appendChild (txt); r.appendChild (โหนด); <span>// การดำเนินการที่คล้ายกันสำหรับ tag<<b>ถึง</b>> </span>โหนด: = Doc.createElement ("ถึง"); txt: = Doc.createTextNode ("http://irbis.ru"); Node.appendChild (txt); r.appendChild (โหนด); <span>// สร้าง DOMElement ()</span>โหนด: = Doc.createElement ("TypeDocument"); <span>// สร้าง XMLDOMattribute โหนด</span> Att: = Doc.createAttribute ("Id", "Order"); <span> // <TypeDocument Id="Order"/> </span> Node.appendChild (Att); r.appendChild (โหนด); <b>จบ;</b> <p>ควรสังเกตว่าการประกาศตัวแปร coDoc: CoDomDocument และ Doc: DomDocument ตลอดจนการสร้างโดยเมธอด Create (Doc: = coDoc.Create;) ทำได้เพียงครั้งเดียว การประกาศตัวแปรอยู่ในส่วนที่อธิบายตัวแปรโกลบอล และไม่ใช่ในโพรซีเดอร์โลคัล ตามที่ได้แสดงให้เห็นเพื่อความชัดเจนในตัวอย่างนี้ (นั่นคือ ตัวแปรโกลบอลของประเภท DomDocument หนึ่งตัวต่อหนึ่งโมดูลโปรแกรม)</p> <p>ผลลัพธ์ของการทำงานของโปรแกรมข้างต้นจะเป็นส่วนหัวที่สร้างขึ้นซึ่งนำไปใช้กับเอกสาร xml ตัวอย่างของเรา: แสดงในรูปที่ 5</p> <img src='https://i0.wp.com/codenet.ru/np-includes/upload/2005/01/05/128662.gif' height="116" width="298" loading=lazy loading=lazy><br>รูปที่ 5 <p><img src='https://i2.wp.com/codenet.ru/np-includes/upload/2005/01/05/128664.gif' height="179" width="385" loading=lazy loading=lazy><br>รูปที่ 6</p><p>ข้อได้เปรียบหลักของการถ่ายโอนข้อมูลในรูปแบบของเอกสาร XML คือสามารถสร้างข้อความโดยใช้โครงสร้างตารางอิสระใน DBMS ทั้งในด้านการรับและการส่ง จากตัวอย่างของเรา สมมติว่าจำเป็นต้องโอนข้อมูลเกี่ยวกับใบแจ้งหนี้ของ Enterprise A จาก DBMS ที่มีโครงสร้างดังแสดงในรูปที่ 6</p> <p>ในการสร้างเอกสาร xml ที่มีใบแจ้งหนี้ การสืบค้น SQL (query A) จะถูกสร้างขึ้นด้วยข้อมูลเกี่ยวกับตัวใบแจ้งหนี้เอง:</p> <b>เลือก</b>* จาก Invoice_General <b>ที่ไหน</b>หมายเลขใบแจ้งหนี้ =: num <b>เลือก</b>สินค้า คุณภาพ ราคา HZ_cod <b>จาก</b>สินค้า <b>ที่ไหน</b>หมายเลขใบแจ้งหนี้ =: num <span>//: num เป็นพารามิเตอร์ที่ระบุหมายเลขใบแจ้งหนี้</span> <p>ด้านล่างนี้เป็นส่วนหนึ่งของโปรแกรมที่สร้างเนื้อหาของเอกสาร xml:</p> <b>ขั้นตอน</b> TThread1.DataBodyCreate (ผู้ส่ง: Tobject); <b>var</b> <span>// ประกาศคลาสและอ็อบเจ็กต์ XMLDomDocument</span>// coDoc: CoDomDocument; <span>// ต้องเป็นโกลบอลสำหรับทั้งโมดูล</span>// เอกสาร: DomDocument; <span>// ประกาศ DOMElement วัตถุ</span> r: IXMLDOMEองค์ประกอบ; // โดมองค์ประกอบ; โหนด Node2: IXMLDOMEองค์ประกอบ; Node3, Node4: IXMLDOMEองค์ประกอบ; // DOMText txt: IXMLDOMTข้อความ; str: สตริง; <span>// เลขใบสั่งของ: <b>จำนวนเต็ม;</b>- ตัวแปรโกลบอล - // มีค่า 987654 // queryA, queryB: <b>สตริง;</b>- ตัวแปรส่วนกลาง // มีค่าที่สอดคล้องกับคำขอ // queryA - คำขอ A พร้อมข้อมูลทั่วไปเกี่ยวกับใบแจ้งหนี้ // queryB - ขอข้อมูล B เกี่ยวกับสินค้าที่อธิบายไว้ใน // ใบแจ้งหนี้ (ดูข้อความ)</span> <b>เริ่ม</b>แบบสอบถาม ปิด; <span>// ดูข้อความ "ขอ A"</span> Query.Text: = แบบสอบถามA; <span>// ดำเนินการตามคำขอ</span>แบบสอบถาม ExecSQL; แบบสอบถามเปิด; <span>// รับที่อยู่ขององค์ประกอบรูท</span> r: = Doc.Get_documentElement; Node2: = Doc.createElement ("คำขอ"); <span>// สร้าง DOMElement (แท็ก)</span>โหนด: = Doc.createElement ("ใบแจ้งหนี้"); <span>// เพิ่มองค์ประกอบให้กับรูท</span> r.appendChild (โหนด2); <span>// เพิ่มรายการไปที่</span>โหนด2 appendChild (โหนด); <span>// สร้าง DOMElement (แท็ก)</span> Node3: = Doc.createElement ("การปลดปล่อย"); <span>// เพิ่มรายการไปที่</span>โหนด appendChild (โหนด3); <span>// เรียกไปที่ช่อง "Depurture" ของคำขอ</span> str: = Query.FieldByName ("Depurture") AsString; <span>// สร้างโหนดข้อความ = ค่าฟิลด์</span><span>// กำหนดค่าให้กับโหนด</span> <span>// โหนดข้อความ ตัวแปร str</span> Node.appendChild (txt); <span>// การดำเนินการที่คล้ายกันสำหรับ tag <Destination>, <DataSend>, // <DataDepurture>, <Currency> // <DestinationCompany>(ช่องฐานข้อมูล "ผู้รับตราส่ง")</span>โหนด: = Doc.createElement ("ปลายทาง"); <span>// ชื่อช่องฐานข้อมูลอาจไม่เหมือนกับชื่อ</span> str: = Query.FieldByName ("ผู้รับมอบ") .AsString; <span>// tag นี่คือข้อดีของการใช้</span> txt: = Doc.createTextNode (str); <span>// DOM ของอินเทอร์เฟซหน้า DBMS ที่รองรับอินเทอร์เฟซ XML // เช่น ORACLE 8i หรือ Ms SQL 2000</span> Node.appendChild (txt); ... <span>// การสร้างคำขอข้อกำหนดสำหรับสินค้า</span> <span>// ปิดคำขอเข้าถึง</span>แบบสอบถาม ปิด; <span>// ดูในข้อความ "คำขอ B" ข้อมูล เกี่ยวกับสินค้า</span> Query.Text: = แบบสอบถามВ; <span>// การกำหนดค่าพารามิเตอร์</span> Query.Params.AsInteger: = หมายเลขใบแจ้งหนี้; <span>// ดำเนินการตามคำขอ</span> Query2.ExecSQL; <span>// เปิดการเข้าถึงเพื่อขอข้อมูล</span>แบบสอบถามเปิด; <span>// สร้าง DOMElement (แท็ก)</span> Node3: = Doc.createElement ("Imems"); <span>// เพิ่มรายการไปที่</span>โหนด appendChild (โหนด3); <span>// วนซ้ำทุกบรรทัดของแบบสอบถาม</span> <b>ในขณะที่</b> <b>ไม่</b> Eof.Query <b>ทำ</b>เริ่ม Node4: = Doc.createElement ("Imem"); <span>// เพิ่มรายการไปที่</span> Node3.appendChild (โหนด4); <span>// การก่อตัวของข้อมูลสำหรับแท็ก</span> str: = Query.FieldByName ("ราคา") AsString; txt: = Doc.createTextNode (str); Node.appendChild (txt); ... <span>// การดำเนินการที่คล้ายกันสำหรับแท็ก <HZ_Cod>, <Quality>, <GoodName> </span> <b>จบ;</b> <b>จบ;</b> <p>จากขั้นตอนนี้ ข้อความต่อไปนี้ของเอกสาร XML จะถูกสร้างขึ้น:</p> <table width="100%"><tbody><tr><td align="middle"><br><img src='https://i1.wp.com/codenet.ru/np-includes/upload/2005/01/05/128661.gif' width="100%" loading=lazy loading=lazy></td> </tr></tbody></table><p>ในการสร้างคำขอจะใช้วิธีการเปิดของวัตถุ <b>IXMLHttpRequest</b>:</p> <b>ขั้นตอน</b>เปิด (const bstrMethod, - method type = "POST" bstrUrl, - Server url varAsync, - Communication mode asynchronous / synchronous = true bstrUser, - username for authentication bstrPassword) - รหัสผ่าน <h2>การสร้างฝั่งเซิร์ฟเวอร์ของการประมวลผลเอกสาร</h2> <p>ตามที่ระบุไว้ก่อนหน้านี้ การประมวลผลคำขอ HTTP สามารถจัดการได้โดยแอปพลิเคชัน CGI หรือเซิร์ฟเล็ต Java ตัวแปรของการเขียน ASP-pages ก็เป็นไปได้เช่นกัน แต่ในกรณีนี้ การถ่ายโอนข้อมูลทำได้โดยวิธี "GET" ผ่านสตริงการสืบค้นเท่านั้น อย่างไรก็ตาม การจัดการคำขอ HTTP สำหรับหน้า ASP นั้นมีประสิทธิภาพมากกว่าแอปพลิเคชัน CGI อย่างไรก็ตาม ในความคิดของฉัน ไม่สำคัญว่าจะประมวลผลอย่างไร แต่การแก้ปัญหานั้นสำคัญกว่า - วิธีสร้างโปรแกรมประมวลผล ไม่ใช่ด้วยวิธีการใด</p> <p>หากจากบทที่แล้วเราตรวจสอบตัวเลือกสำหรับการสร้างเอกสาร XML แสดงว่างานของแอปพลิเคชันเซิร์ฟเวอร์นั้นตรงกันข้าม - การแยกวิเคราะห์เอกสาร XML ด้านล่างนี้เป็นส่วนหนึ่งของโปรแกรมที่แยกวิเคราะห์เอกสาร xml:</p> <b>ขั้นตอน</b> Tthread1.DataParser (ผู้ส่ง: Tobject); <b>var</b> <span>// ประกาศ DOMElement วัตถุ</span> r, FNode: IXMLDOMEองค์ประกอบ; Str ชื่อไฟล์: สตริง; พาร์: สตริง; <span>// ประกาศ soclass และ</span> CoDocXML, CoDocXSL, CoDocResult: CoDomDocument; <span>// XMLDomDocument วัตถุ</span> XMLDoc, XSLDoc, ResultDoc: DomDocument; <span>// HttpStr: สตริง; - ตัวแปรส่วนกลางที่มีสตริงคำขอ HTTP</span> <b>เริ่ม</b> XMLDoc: = coDocXML.Create; XMLDoc.LoadXML (HttpStr); <span>// รับที่อยู่ขององค์ประกอบรูท</span> r: = Doc.Get_documentElement; <span>// รับค่าขององค์ประกอบ</span> FNode: = r.SelectSingleNode ("// TypeDocument"); <span>// รับค่าของแอตทริบิวต์ id = "Order"</span>ชื่อไฟล์: = FNode.GetAttibute ("id"); <span>// และการสร้างชื่อไฟล์ Order.xsl</span>ชื่อไฟล์: = ชื่อไฟล์ + ". Xsl"; <span>// สร้างเอกสาร XSLDoc</span> XSLDoc: = coDocXSL.สร้าง; XSLDoc.LoadXML (ชื่อไฟล์); <span>// สร้างเอกสาร XMLDoc</span> ResultDoc: = coDocResult.Create; <span>// ตั้งค่าโหมดการประมวลผลแบบซิงโครนัส</span> ResultDoc.Set_async (เท็จ); <span>// ตั้งค่าการตรวจสอบการแยกวิเคราะห์</span> ResultDoc.validateOnParse: = จริง; <span>// แยกวิเคราะห์ XMLDoc โดยใช้เทมเพลต XSL</span> XMLDoc.transformNodeToObject (XSLDoc, ResultDoc); <span>// ตัวแปร Str ถูกกำหนดเป็นค่าข้อความ</span> <span>// ของเอกสารผลลัพธ์</span> Str: = ResultDoc.text; <span>// ค้นหาองค์ประกอบ</span> FNode: = r.SelectSingleNode ("// หมายเลขใบแจ้งหนี้"); <span>// และรับค่าขององค์ประกอบ</span> parm: = FNode.text; <span>// ปิดคำขอเข้าถึง</span>แบบสอบถาม ปิด; ข้อความค้นหา: = Str; <span>// การกำหนดค่าพารามิเตอร์</span> Query.Params.AsString: = parm; <span>// ดำเนินการตามคำขอ</span>แบบสอบถาม ExecSQL; <b>จบ;</b> <p>จุดเด่นทั้งหมดของการแยกวิเคราะห์อยู่ที่การใช้เทมเพลต XSL ซึ่งสร้างขึ้นแยกกันสำหรับเอกสารแต่ละประเภท ผลลัพธ์ของการแยกวิเคราะห์คือสตริงการสืบค้น SQL ต่อจากนั้น การดำเนินการของสตริงการสืบค้น SQL ที่สร้างขึ้นจะทำการเปลี่ยนแปลงที่จำเป็นกับข้อมูลใน DBMS</p> <p>ข้อดีของการใช้การแยกวิเคราะห์ผ่านเทมเพลตก็คือคุณจะได้รับความยืดหยุ่นของข้อมูล และคุณจะได้รับความเป็นอิสระของอัลกอริทึมอย่างสมบูรณ์จากโค้ดโปรแกรม ด้านล่างนี้คือข้อความของเทมเพลต XSL ที่ใช้ในการประมวลผลเอกสารประเภท ORDER:</p><p> <!-- файл Order.xsl --> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <xsl:for-each select="//header">แทรกลงใน TABREG (FROM, TO, TYPEDOC, body) ค่า (" <xsl:value-of select="from" />", "<xsl:value-of select="to" />", "<xsl:value-of select="TypeDocument/@id" />") </xsl:for-each> <xsl:for-each select="//item">INSERT เป็น GOODS (invoiceNumber, name, price, quality) VALUES (": num", " <xsl:value-of select="name" />", "<xsl:value-of select="price" />", "<xsl:value-of select="quality" /> ") </xsl:for-each> </xsl:template> </xsl:stylesheet> </p><p>จากการอธิบายตัวอย่างข้างต้น ควรสังเกตว่าการใช้คู่แท็กนั้นเป็นทางการเนื่องจาก หลังจากแยกวิเคราะห์ เอกสาร XML ที่เป็นผลลัพธ์ต้องมีอย่างน้อยหนึ่งโหนดอย่างเป็นทางการ เมธอด ResultDoc.text กำหนดค่าข้อความของ ResultDoc ที่ได้รับระหว่างการแยกวิเคราะห์เอกสาร XML ในกรณีนี้ ค่าคือทุกอย่างที่อยู่ในกรอบของแท็กคู่หนึ่ง และนั่นคือ แบบสอบถาม SQL ที่เราสร้างขึ้น</p> <p>คุณสมบัติอื่นของการเขียนโปรแกรมควรสังเกตความเป็นไปได้ของการใช้พารามิเตอร์ SQL <b>: เลขที่</b>การใช้พารามิเตอร์ทำให้ข้อความของเทมเพลต xsl ง่ายขึ้น คำจำกัดความของค่าขององค์ประกอบที่สอดคล้องกันของโหนดของเอกสาร XML ถูกกำหนดในขั้นต้นโดยการเลือกโดยใช้ชื่อของโหนดที่เกี่ยวข้อง ตัวอย่างเช่น</p><h2>XSL ได้อย่างรวดเร็ว</h2> <p>XSL เป็นตัวย่อที่ได้มาจากภาษาของสไตล์ชีต eXtensible ซึ่งเป็นภาษาการจัดรูปแบบสไตล์ชีต (ข้อมูล XML) ดังที่คุณเห็นจากส่วนหัว eXtensible Stylesheet Language (XSL) ใช้เพื่อจัดรูปแบบข้อมูล XML ตามคำจำกัดความ W3C XSL ประกอบด้วยสองส่วน:</p> <ul><li>XSLT - การแปลง XSL ภาษาที่ใช้ในการแปลงหรือจัดรูปแบบ (แปลง) เอกสาร XML ดังนั้น ด้วยความช่วยเหลือของ XSLT เราจึงสามารถตัดชุดข้อมูลและรูปแบบการนำเสนอข้อมูลที่แตกต่างกันได้</li><li>การจัดรูปแบบองค์ประกอบ องค์ประกอบเหล่านี้รวมถึงองค์ประกอบการพิมพ์ทั้งหมดของข้อมูลหลังจากประมวลผลด้วย XSL แล้ว ใช้สำหรับสร้างหน้า HTML เท่านั้น</li> </ul><p>ด้วยความช่วยเหลือของ XSLT เราสามารถเลือกข้อมูลที่เราต้องการจากไฟล์ XML และจัดเรียงในรูปแบบเพื่อนำเสนอต่อผู้ใช้ ตัวอย่างเช่น ในกรณีของเรา เราได้แปลงข้อมูล XML ในรูปแบบของแบบสอบถาม SQL การใช้ XSL แบบคลาสสิกมักจะจัดรูปแบบข้อมูลในรูปแบบของหน้า HTML หรือในรูปแบบไฟล์ RTF ที่แทบจะไม่เกิดขึ้นเลย</p> <p>ไฟล์ XSL อธิบายเทมเพลต ซึ่งจะทำการแปลงข้อมูล XML กลับไปที่เทมเพลต xsl องค์ประกอบ (คำสั่ง) ต่อไปนี้สามารถแยกแยะได้ใน XSLT:</p> <table cellspacing="0" cellpadding="4" width="500" border="1"><tbody><tr><td valign="top" width="31%"> <b>คำสั่ง XSL</b> </td><th align="middle" width="69%"> <b>คำอธิบาย</b> </th> </tr><tr><td>xsl: สมัครเทมเพลต</td> <td>คำสั่งที่ระบุการใช้เทมเพลตที่ตรงกันสำหรับแอตทริบิวต์ select = "ชื่อเทมเพลต"</td> </tr><tr><td>xsl: คุณลักษณะ</td> <td>สร้างแผนผังแอตทริบิวต์และเพิ่มลงในองค์ประกอบเอาต์พุต ชื่อพารามิเตอร์ = "ชื่อแอตทริบิวต์" เนมสเปซคือ URI เนมสเปซ (คำนำหน้าเนมสเปซ)</td> </tr><tr><td>xsl: เทมเพลตการโทร</td> <td>เรียกเทมเพลต ชื่อแอตทริบิวต์ = "URI ไปยังเทมเพลต"</td> </tr><tr><td>xsl: เลือก <br>xsl: เมื่อไร <br>xsl: มิฉะนั้น</td> <td>การเลือกตามเงื่อนไข xsl: เมื่อ expr = "การประเมินนิพจน์ในสคริปต์", <br>ภาษา = "ชื่อภาษา" <br>ทดสอบ = "นิพจน์ที่ประเมิน"</td> </tr><tr><td>xsl: ความคิดเห็น</td> <td>สร้างความคิดเห็นในเอกสารส่งออก</td> </tr><tr><td>xsl: สำเนา <br>xsl: สำเนาของ</td> <td>คัดลอกโหนดปัจจุบันไปยังแหล่งเอาต์พุตหรือแทรกส่วนย่อยของเอกสารลงในโหนดโดยที่แอตทริบิวต์ select = "ชื่อโหนดต้นทาง"</td> </tr><tr><td>xsl: องค์ประกอบ</td> <td>สร้างองค์ประกอบเอาต์พุตตามชื่อ ชื่อแอตทริบิวต์ = "ชื่อองค์ประกอบ" เนมสเปซ = "การอ้างอิงเนมสเปซ uri"</td> </tr><tr><td>xsl: for-each</td> <td>ใช้เทมเพลตอีกครั้งกับโหนดทั้งหมดของรายการโหนด โดยแอตทริบิวต์ select จะระบุรายการของโหนด</td> </tr><tr><td>xsl: ถ้า</td> <td>การตรวจสอบเงื่อนไข กำหนดโดยแอตทริบิวต์การทดสอบเป็นนิพจน์</td> </tr><tr><td>xsl: รวม</td> <td>รวมเทมเพลตภายนอกแอตทริบิวต์ href = "การอ้างอิง URI"</td> </tr><tr><td>xsl: เอาต์พุต</td> <td>ระบุเอาต์พุตแอตทริบิวต์ method สามารถเป็น "xml", "html" หรือ "text"</td> </tr><tr><td>xsl: พารามิเตอร์</td> <td>ระบุค่าของพารามิเตอร์ ชื่อแอตทริบิวต์ = "ชื่อพารามิเตอร์" เลือก = "ค่า"</td> </tr><tr><td>xsl: การประมวลผลคำสั่ง</td> <td>สร้างคำสั่งการประมวลผล ชื่อแอตทริบิวต์ = "ชื่อของกระบวนการคำสั่ง"</td> </tr><tr><td>xsl: sort</td> <td>sorts set of nodes, คุณสมบัติ select = "node name", data-type = data type ("text" | "number" | Qname), order = sort direction ("ascending" | "descending")</td> </tr><tr><td>xsl: สไตล์ชีต</td> <td>กำหนดเอกสารเทมเพลต xsl เป็นองค์ประกอบรูทสำหรับ XSLT</td> </tr><tr><td>xsl: template</td> <td>กำหนดเทมเพลต xsl ชื่อแอตทริบิวต์ = "URI นำหน้าชื่อเทมเพลต" จับคู่ = "ตัวบ่งชี้ของโหนดที่ใช้เทมเพลต"</td> </tr><tr><td>xsl: ข้อความ</td> <td>สร้างข้อความไปยังเอาต์พุตสตรีม คุณลักษณะ disable-output-escaping = "yes" หรือ "no" หมายถึงความสามารถในการสร้างอักขระ ESC</td> </tr><tr><td>xsl: ค่าของ</td> <td>แทรกค่าของโหนดที่เลือกเป็นข้อความ, แอตทริบิวต์ select = "pointer to node" จากตำแหน่งที่รับค่า</td> </tr><tr><td>xsl: ตัวแปร</td> <td>ระบุค่าขอบเขตตัวแปร ชื่อแอตทริบิวต์ = "ชื่อตัวแปร" เลือก = "การคำนวณค่าตัวแปร"</td> </tr><tr><td>xsl: พร้อมพารามิเตอร์</td> <td>ใช้พารามิเตอร์กับแม่แบบ ชื่อแอตทริบิวต์ = "ชื่อพารามิเตอร์" เลือก = นิพจน์เพื่อประเมินบริบทปัจจุบัน ค่าเริ่มต้น ""</td> </tr></tbody></table><h2>บทสรุป</h2> <p>สุดท้าย ควรสังเกตว่าการใช้ตัวแยกวิเคราะห์ XML มาตรฐาน <i>msxml.dll</i>ไม่ใช่เครื่องมือเดียวสำหรับการแยกวิเคราะห์และสร้างเอกสาร XML ตัวอย่างเช่น ในการสร้างเอกสาร XML อย่างมีประสิทธิภาพ ให้ใช้ส่วนประกอบ <b>TPageProduser</b>และ <b>ผู้ผลิตตาราง</b>... แต่บทความนี้เน้นเฉพาะความกว้างและการบังคับใช้ของโมเดล DOM ในทางปฏิบัติเท่านั้น</p> <p>ผู้เขียนจะขอบคุณมากสำหรับคำติชมเกี่ยวกับความเกี่ยวข้องของหัวข้อ เนื้อหาทั่วไป รูปแบบการนำเสนอ ตลอดจนความคิดเห็นอื่น ๆ ทั้งหมดที่จะช่วยปรับปรุงคุณภาพของการเขียนบทความและการเปิดตัวหนังสือที่ครอบคลุมหัวข้อต่อไป ด้านการปฏิบัติของการใช้เอกสาร XML ในอีคอมเมิร์ซ ข้อมูลรายละเอียดเพิ่มเติมเกี่ยวกับการใช้งานจริงของเอกสารอิเล็กทรอนิกส์สามารถดูได้จากเว็บไซต์ของผู้เขียน www.eDocs.al.ru นอกจากนี้ยังมีการวางแผนที่จะวางข้อความต้นฉบับและตัวอย่างบนไซต์ของผู้เขียน</p> <br> <br> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy loading=lazy>");</script> </div> </article> <div class="post-bottom"> <div class="post-share"> <script src="//yastatic.net/es5-shims/0.0.2/es5-shims.min.js"></script> <script src="//yastatic.net/share2/share.js"></script> <div class="ya-share2" data-services="vkontakte,facebook,odnoklassniki,moimir" data-counter=""></div> </div> </div> <div class='yarpp-related'> <div class="related-items"> <div class="headline">ไม่พบคำตอบสำหรับคำถามของคุณ? ดูที่นี่</div> <div class="items"> <div class="related-item"> <a class="related-item__title" href="https://appcube.ru/th/chto-takoe-linkedin-linkedin-chto-eto-takoe-i-kak-linkedin-mozhet-pomoch-v-poiske-raboty.html"><img src="/uploads/3889cb8788eaefca7a9fae35afefb9bd.jpg" width="120" height="120" alt="LinkedIn - มันคืออะไรและ LinkedIn สามารถช่วยคุณหางานในฝันของคุณได้อย่างไร" class="related-item__image" / loading=lazy loading=lazy>LinkedIn - มันคืออะไรและ LinkedIn สามารถช่วยคุณหางานในฝันของคุณได้อย่างไร</a> <div class="related-item__comments"><span></span></div> </div> <div class="related-item"> <a class="related-item__title" href="https://appcube.ru/th/zakazat-hosting-vds-s-zashchitoi-ot-ddos-zashchita-ot-ddos-atak-ddos-guard-vash-zashchishchennyi.html"><img src="/uploads/f09415daa49a1b6f06b530fda74ac694.jpg" width="120" height="120" alt="การป้องกัน DDoS: DDoS GUARD - โฮสติ้งที่ปลอดภัยของคุณ" class="related-item__image" / loading=lazy loading=lazy>การป้องกัน DDoS: DDoS GUARD - โฮสติ้งที่ปลอดภัยของคุณ</a> <div class="related-item__comments"><span></span></div> </div> <div class="related-item"> <a class="related-item__title" href="https://appcube.ru/th/kak-poluchit-obnovlenie-windows-phone-windows-smartfony-teper-mozhno-obnovit-s.html"><img src="/uploads/4a4f2473a2de1277a1771ac2214f5067.jpg" width="120" height="120" alt="สมาร์ทโฟน Windows สามารถอัปเดตโดยใช้ PC . ได้แล้ว" class="related-item__image" / loading=lazy loading=lazy>สมาร์ทโฟน Windows สามารถอัปเดตโดยใช้ PC . ได้แล้ว</a> <div class="related-item__comments"><span></span></div> </div> </div> </div> </div> <div style="text-align: center; margin-top: 15px; margin-bottom: 15px; " id="vanna-1965575812"><div class="adsense"><script type="text/javascript">ga_1();</script></div></div> </main> <aside class="sidebar"> <div class="advices" data-theme="vannapedia_v.3"> <div class="headline"></div> <div class="advices-content"> <img src="/uploads/b223892e75a01056667bb0fd1febb693.jpg" width="120" height="120" alt="พูลการขุด - ทำไมนักขุดถึงต้องการพูล?" class="advices__image" / loading=lazy loading=lazy> <div class="advices__title" data-id="3334"><a href="https://appcube.ru/th/luchshie-puly-dlya-maininga-ethereum-i-osobennosti-nachisleniya-pribyli-puly.html">พูลการขุด - ทำไมนักขุดถึงต้องการพูล?</a></div> </div> </div> <div class="vk-widget" id="text-3"> <div class="textwidget"><script type="text/javascript" src="//vk.com/js/api/openapi.js?130"></script> <div id="vk_groups"></div> </div> </div> <div class="sidebar-questions"> <div class="headline">ใหม่</div> <ul> <li><a href="https://appcube.ru/th/kakie-seichas-populyarnye-socialnye-seti-luchshie-socialnye-seti-tendencii-i.html" >โซเชียลเน็ตเวิร์กยอดนิยมตอนนี้คืออะไร</a></li> <li><a href="https://appcube.ru/th/izvestnye-soc-seti-mira-luchshie-socialnye-seti-spisok-socialnyh.html" >เครือข่ายสังคมที่มีชื่อเสียงของโลก เครือข่ายโซเชียลที่ดีที่สุด รายชื่อโซเชียลเน็ตเวิร์ก</a></li> <li><a href="https://appcube.ru/th/etapy-sozdaniya-mobilnogo-prilozheniya-biznes-plan-po-razrabotke-mobilnogo.html" >แผนธุรกิจสำหรับการพัฒนาแอปพลิเคชั่นมือถือ</a></li> <li><a href="https://appcube.ru/th/obzor-funkcii-iphone-se-vs-chto-nuzhno-znat-ob-se-podrobnyi-obzor-i.html" >ตรวจสอบรายละเอียดและทดสอบคำอธิบายของ Apple iPhone SE iPhone 5 se</a></li> <li><a href="https://appcube.ru/th/podnyat-poseshchaemost-stranicy-kak-uvelichit-trafik-dobeites.html" >เพิ่มการเข้าชมหน้า</a></li> <li><a href="https://appcube.ru/th/bystraya-zaryadka-dlya-telefonov-honor-bystraya-zaryadka-dlya-telefonov.html" >Fast Charging for Honor Phones วิธีชาร์จโทรศัพท์ของคุณเร็วขึ้นโดยไม่ต้อง Super Charge</a></li> </ul> </div> <div class="section"> <div id="macire1" style="height:500px;width:240px;" align="center"></div> </div> <div class="section"> <div class="headline">บทความยอดนิยม</div> <ul class="sidebar-posts"> <li><a href="https://appcube.ru/th/kak-zashchitit-informaciyu-ot-spama-zashchita-ot-spama-metody-zashchity-ot.html"><img src="/uploads/b46dc42e52988aea623e576c03e38597.jpg" width="80" height="80" alt="วิธีป้องกันข้อมูลจากสแปม" / loading=lazy loading=lazy>วิธีป้องกันข้อมูลจากสแปม</a></li> <li><a href="https://appcube.ru/th/sistema-zashchity-ot-spama-5-bukv-metody-borby-so-spamom-kakie.html"><img src="/uploads/89a7aa45d1fbb02414d59cb4785ea1df.jpg" width="80" height="80" alt="ระบบป้องกันสแปม 5 ตัวอักษร" / loading=lazy loading=lazy>ระบบป้องกันสแปม 5 ตัวอักษร</a></li> <li><a href="https://appcube.ru/th/kak-podrostku-zarabotat-deneg-esli-net-raboty-kak-zarabotat.html"><img src="/uploads/92e861d3eb5ae46a6e9c64c870cbff99.jpg" width="80" height="80" alt="จะสร้างวัยรุ่นบนอินเทอร์เน็ตได้อย่างไร?" / loading=lazy loading=lazy>จะสร้างวัยรุ่นบนอินเทอร์เน็ตได้อย่างไร?</a></li> </ul> </div> <div class="section"> <div class="headline">ใหม่บนเว็บไซต์</div> <ul class="sidebar-posts sidebar-photo"> <li><a href="https://appcube.ru/th/proshivka-smartfonov-htc-nestandartnaya-proshivka-htc-desire--.html">เฟิร์มแวร์ที่ไม่ได้มาตรฐาน HTC Desire - คู่มือ วิธีเฟิร์มแวร์ htc</a></li> <li><a href="https://appcube.ru/th/easypay-ua-sistema-elektronnyh-platezhei-easypay---elektronnye-dengi-belarusi-chto.html">Easypay - เงินอิเล็กทรอนิกส์ของเบลารุส</a></li> <li><a href="https://appcube.ru/th/sozdanie-gruppy-v-kontakte-kak-sozdat-gruppu-v-vk.html">วิธีสร้างกลุ่มใน VK - การโปรโมตกลุ่มในการติดต่อ</a></li> <li><a href="https://appcube.ru/th/vklyuchit-otobrazhenie-razmera-kisti-v-fotoshop-reshaem-problemu-s.html">การแก้ไขปัญหาโครงร่างแปรงที่ขาดหายไปใน Photoshop</a></li> <li><a href="https://appcube.ru/th/konvertirovat-fail-psd-v-jpg-onlain-tehnicheskie-svedeniya-o-failah-psd.html">รายละเอียดทางเทคนิคของไฟล์ PSD</a></li> </ul> </div> </aside> </div> <footer class="footer"> <nav class="footer__nav"><ul><li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-1219"><a href="https://appcube.ru/th/">ใหม่</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8059"><a href="https://appcube.ru/th/akvarelnye-fony-dlya-fotoshopa-skachat-besplatno-razlichnye-akvarelnye.html">ดาวน์โหลดฟรีพื้นผิวสีน้ำต่างๆพร้อมคราบ</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8058"><a href="https://appcube.ru/th/opredelenie-cveta-na-ekrane-monitora-kak-opredelit-cvet-v.html">จะกำหนดสีใน Photoshop ได้อย่างไร?</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8057"><a href="https://appcube.ru/th/kak-razmyt-kraya-foto-kak-sdelat-razmytye-kraya-v-photoshop-sdelat.html">วิธีทำขอบเบลอใน Photoshop ทำขอบเบลอ</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8055"><a href="https://appcube.ru/th/ne-rabotaet-sohranit-kak-v-windows-7-chto-delat-esli-save-as-sohranit-kak-ne.html">จะเกิดอะไรขึ้นถ้าไม่ได้คลิกบันทึกเป็น</a></li> </ul> </li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-1230"><a href="https://appcube.ru/th/">เป็นที่นิยม</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8054"><a href="https://appcube.ru/th/kak-v-fsh-sdelat-prozrachnyi-fon-kak-v-fotoshope-sdelat-prozrachnyi.html">จะสร้างพื้นหลังโปร่งใสใน Photoshop ได้อย่างไร?</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8053"><a href="https://appcube.ru/th/razdevaem-devushku-v-fotoshope-kak-razdet-devushku-v-fotoshope.html">วิธีเปลื้องผ้าผู้หญิงใน photoshop เปลื้องผ้าผู้หญิงใน photoshop</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8052"><a href="https://appcube.ru/th/kommercheskie-nabory-kistei-dlya-fotoshopa-gde-skachat-kisti-dlya.html">จะดาวน์โหลดแปรง Photoshop ได้ที่ไหน: ตัวเลือกเครื่องมือฟรีที่ดีที่สุด</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8051"><a href="https://appcube.ru/th/nadpisi-v-stile-kak-sdelat-krasivye-nadpisi-na-kartinke-bukvy-v.html">วิธีทำตัวอักษรที่สวยงามบนรูปภาพ?</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8050"><a href="https://appcube.ru/th/chem-otkryt-fail-psd-kak-otkryt-fail-psd-bez-photoshop-format-psd-chto.html">วิธีเปิดไฟล์ .PSD วิธีเปิดไฟล์ PSD โดยไม่มีรูปแบบ Photoshop psd คืออะไร</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8049"><a href="https://appcube.ru/th/ne-otobrazhayutsya-kartinki-v-brauzere-prichiny-i-sposoby-resheniya-problemy.html">สาเหตุและแนวทางแก้ไขปัญหา</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8048"><a href="https://appcube.ru/th/vektor-v-fotoshope-kak-pravilno-otkryt-vektornoe-izobrazhenie-v-photoshop.html">วิธีเปิดภาพเวกเตอร์ใน Photoshop อย่างถูกต้อง ภาพถ่ายในรูปแบบเวกเตอร์ Photoshop</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8047"><a href="https://appcube.ru/th/sohranenie-nevozmozhno-proizoshel-programmnyi-sboi-ustranenie.html">แก้ไขปัญหาการกู้คืนไฟล์</a></li> </ul> </li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-1236"><a href="https://appcube.ru/th/">ที่แนะนำ</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8046"><a href="https://appcube.ru/th/elegantnyi-zhenskii-noutbuk-luchshie-zhenskie-noutbuki-i-ne-tolko-hp-spectre--.html">แล็ปท็อปที่ดีที่สุดสำหรับผู้หญิงและอีกมากมาย</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8045"><a href="https://appcube.ru/th/samyi-luchshii-noutbuk-dlya-devushki-vnimanie-nuzhen-krasivyi-noutbuk.html">ข้อควรสนใจ: คุณต้องมีแล็ปท็อปที่สวยงามสำหรับเด็กผู้หญิง</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6845"><a href="https://appcube.ru/th/skachat-universalnyi-draiver-dlya-skanera-hp-zakachat-programmu-dlya.html">ดาวน์โหลดซอฟต์แวร์สำหรับเครื่องสแกน hp</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6844"><a href="https://appcube.ru/th/rashka-kvadratnyi-vatnik-rashka-kvadratnyi-vatnik-vatnik.html">เสื้อแจ็คเก็ตผ้าสี่เหลี่ยม Rashka</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6843"><a href="https://appcube.ru/th/sposoby-proverit-balans-i-trafik-na-bilain-sposoby-proverit-ostatok.html">วิธีตรวจสอบการจราจรที่เหลือบน Beeline ตรวจสอบการจราจรบนโมเด็ม Beeline</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6842"><a href="https://appcube.ru/th/tvich-vhod-sozdanie-translyacii-na-twitch-sozdanie-scen-i-istochnikov.html">สร้าง Twitch Stream</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6841"><a href="https://appcube.ru/th/skachat-draivera-dlya-materinskoi-platy-asrock-am3-zagruzka-draiverov-dlya.html">ดาวน์โหลดไดรเวอร์เมนบอร์ด ASRock</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6840"><a href="https://appcube.ru/th/webmoney-eto-bolee-slozhnaya-sistema-elektronnyh-koshelkov-kak.html">วิธีสร้างกระเป๋าเงิน WebMoney ในยูเครน ลงทะเบียนในกระเป๋าเงิน webmoney</a></li> </ul> </li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-6898"><a href="https://appcube.ru/th/">เกี่ยวกับเว็บไซต์</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6900"><a href="">เกี่ยวกับเว็บไซต์</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6901"><a href="">โฆษณาบนเว็บไซต์</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6902"><a href="">รายชื่อผู้ติดต่อ</a></li> </ul> </li> </ul></nav> <div class="footer-bottom"> <div class="footer-left"> <div class="foot__logo"> <div class="footer__logo-sitename">appcube.ru <span>รู</span></div> </div> <style> .foot__logo { min-height: 35px; margin: 0 0 11px -79px; padding: 9px 0 0 79px; text-decoration: none; } </style> <p>© 2021 สงวนลิขสิทธิ์</p> <p>เว็บไซต์เกี่ยวกับคอมพิวเตอร์</p> <ul class="footer-bottom__nav"> <li><a href="" >โฆษณาในโครงการ</a></li> </ul> </div> <div class="footer-buttons"> </div> <ul class="footer__soc"> <li><a href="http://vk.com/" target="_blank" class="vk">ติดต่อกับ</a></li> <li>เพื่อนร่วมชั้นเรียน</li> <li><a href="http://www.facebook.com/" target="_blank" class="fb">เฟสบุ๊ค</a></li> <li><a href="https://twitter.com/" target="_blank" class="twi">ทวิตเตอร์</a></li> </ul> <div class="footer-right"> <div class="footer__note"></div> <div class="footer__counters" id="text-2"> <div class="textwidget"></div> </div> </div> </div> </footer> </div> </div> <link rel='stylesheet' id='wp-lightbox-bank.css-css' href='/wp-content/plugins/wp-lightbox-bank/assets/css/wp-lightbox-bank.css?ver=4.8.3' type='text/css' media='all' /> <script type='text/javascript' src='https://appcube.ru/wp-content/themes/vannapedia_v.3/js/scripts.js'></script> <script type='text/javascript' src='/wp-includes/js/comment-reply.min.js?ver=4.8.3'></script> <script type='text/javascript' src='/assets/scripts1.js'></script> <script type='text/javascript'> /* <![CDATA[ */ var tocplus = { "smooth_scroll":"1"} ; /* ]]> */ </script> <script type='text/javascript' src='https://appcube.ru/wp-content/plugins/table-of-contents-plus/front.min.js?ver=1509'></script> <script type='text/javascript'> var q2w3_sidebar_options = new Array(); q2w3_sidebar_options[0] = { "sidebar" : "sidebar-fixed", "margin_top" : 10, "margin_bottom" : 0, "stop_id" : "respond", "screen_max_width" : 0, "screen_max_height" : 0, "width_inherit" : false, "refresh_interval" : 1500, "window_load_hook" : false, "disable_mo_api" : false, "widgets" : ['text-4'] } ; </script> <script type='text/javascript' src='https://appcube.ru/wp-content/plugins/q2w3-fixed-widget/js/q2w3-fixed-widget.min.js?ver=5.0.4'></script> <script type='text/javascript' src='/wp-includes/js/wp-embed.min.js?ver=4.8.3'></script> <script type='text/javascript' src='https://appcube.ru/wp-content/plugins/wp-lightbox-bank/assets/js/wp-lightbox-bank.js?ver=4.8.3'></script> <script type='text/javascript' src='https://appcube.ru/wp-content/plugins/akismet/_inc/form.js?ver=4.0'></script> </body> </html>