สร้างไฟล์ XML XML Schema (XML schema) - คำอธิบายโครงสร้างของเอกสาร XML 440 n ตัวอย่างของไฟล์ xml

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

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

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

วิธีที่ 1: Visual Studio

แทนที่จะใช้โปรแกรมแก้ไขโค้ดของ Microsoft คุณสามารถใช้แอนะล็อกจากนักพัฒนารายอื่นได้ ในความเป็นจริง Visual Studio เป็นเวอร์ชันขั้นสูงกว่าปกติ "สมุดบันทึก"- ขณะนี้โค้ดมีการไฮไลต์แบบพิเศษ มีการไฮไลต์หรือแก้ไขข้อผิดพลาดโดยอัตโนมัติ และเทมเพลตพิเศษได้ถูกโหลดลงในโปรแกรมแล้ว ซึ่งช่วยให้สร้างไฟล์ XML ขนาดใหญ่ได้ง่ายขึ้น

ในการเริ่มต้นคุณต้องสร้างไฟล์ คลิกที่รายการ "ไฟล์"ในแผงด้านบนและเลือกจากเมนูแบบเลื่อนลง "สร้าง…"- รายการจะเปิดขึ้นเพื่อระบุรายการ "ไฟล์".

  • คุณจะถูกนำไปยังหน้าต่างที่มีนามสกุลไฟล์ให้เลือก ให้เลือกรายการตามนั้น "ไฟล์ XML".
  • ไฟล์ที่สร้างขึ้นใหม่จะมีบรรทัดแรกที่มีการเข้ารหัสและเวอร์ชันอยู่แล้ว ตามค่าเริ่มต้น จะมีการระบุเวอร์ชันแรกและการเข้ารหัส UTF-8ซึ่งคุณสามารถเปลี่ยนแปลงได้ตลอดเวลา ถัดไป ในการสร้างไฟล์ XML แบบเต็ม คุณจะต้องจดทุกอย่างที่อยู่ในคำแนะนำก่อนหน้านี้

    เมื่อเสร็จแล้ว ให้เลือกอีกครั้งในแผงด้านบน "ไฟล์"และมีรายการจากเมนูแบบเลื่อนลง "บันทึกทุกอย่าง".

    วิธีที่ 2: Microsoft Excel

    คุณสามารถสร้างไฟล์ XML ได้โดยไม่ต้องเขียนโค้ด เช่น ใช้ Microsoft Excel เวอร์ชันใหม่ ซึ่งช่วยให้คุณบันทึกตารางด้วยส่วนขยายนี้ได้ อย่างไรก็ตาม คุณต้องเข้าใจว่าในกรณีนี้ จะไม่สามารถสร้างสิ่งที่มีประโยชน์มากกว่าตารางปกติได้

    วิธีนี้เหมาะสำหรับผู้ที่ไม่ต้องการหรือไม่รู้วิธีทำงานกับโค้ด อย่างไรก็ตาม ในกรณีนี้ ผู้ใช้อาจประสบปัญหาบางอย่างเมื่อเขียนไฟล์ใหม่ในรูปแบบ XML น่าเสียดายที่การดำเนินการแปลงตารางปกติเป็น XML สามารถทำได้บน MS Excel เวอร์ชันใหม่ล่าสุดเท่านั้น เมื่อต้องการทำเช่นนี้ ใช้คำแนะนำทีละขั้นตอนต่อไปนี้:


    วิธีที่ 3: แผ่นจดบันทึก

    แม้แต่แบบปกติก็ค่อนข้างเหมาะสำหรับการทำงานกับ XML "โน๊ตบุ๊ค"อย่างไรก็ตาม จะเป็นเรื่องยากสำหรับผู้ใช้ที่ไม่คุ้นเคยกับไวยากรณ์ของภาษา เนื่องจากจำเป็นต้องเขียนคำสั่งและแท็กต่างๆ ลงไป กระบวนการนี้จะค่อนข้างง่ายกว่าและมีประสิทธิภาพมากกว่ามากในโปรแกรมเฉพาะสำหรับการแก้ไขโค้ดเช่นใน Microsoft Visual Studio มีการไฮไลต์แท็กพิเศษและคำแนะนำเครื่องมือ ซึ่งช่วยให้การทำงานของบุคคลที่เพิ่งเริ่มใช้ไวยากรณ์ของภาษานี้ง่ายขึ้นอย่างมาก

    วิธีนี้ไม่จำเป็นต้องดาวน์โหลดอะไรเลย เนื่องจากมีอยู่แล้วในระบบปฏิบัติการ "โน๊ตบุ๊ค"- เรามาลองสร้างตาราง XML อย่างง่ายโดยใช้คำแนะนำเหล่านี้:


    ผลลัพธ์ที่เสร็จสิ้นแล้วของคุณควรมีลักษณะดังนี้:




    25
    จริง


    คอมไพเลอร์ XML ต้องประมวลผลโค้ดนี้เป็นตารางที่มีหนึ่งคอลัมน์ที่มีข้อมูลเกี่ยวกับ Ivan Ivanov บางตัว

    ใน "สมุดบันทึก"มันค่อนข้างเป็นไปได้ที่จะสร้างตารางง่าย ๆ แบบนี้ แต่เมื่อสร้างอาร์เรย์ข้อมูลขนาดใหญ่อาจเกิดปัญหาขึ้นเนื่องจากเป็นเรื่องปกติ "สมุดบันทึก"ไม่มีฟังก์ชันสำหรับแก้ไขข้อผิดพลาดในโค้ดหรือไฮไลต์

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

    ในบทความก่อนหน้าเกี่ยวกับ XML เราได้ดูวิธีการล้าสมัยในการตรวจสอบเอกสาร XML เช่น XML DTD วิธีการนี้ยังคงใช้เพื่อตรวจสอบความถูกต้องของข้อมูล XML แต่ทุกๆ วัน เทคโนโลยีใหม่ที่เรียกว่า XML Schema จะเข้ามาแทนที่มากขึ้นเรื่อยๆ ข้อบกพร่องหลายประการที่อยู่ใน XML DTD ได้รับการแก้ไขแล้วใน XML schema ดังนั้นในขณะนี้นักพัฒนาชั้นนำทั้งหมดจึงใช้เฉพาะ XML schema ในการตรวจสอบเอกสาร

    เพื่อชื่นชมข้อดีของ XML Schema เหนือ DTD เรามาดูข้อเสียหลักของ DTD ที่ได้รับการแก้ไขสำเร็จใน XML Schema กันดีกว่า ฉันได้กล่าวถึงพวกเขาแล้วในบทความ “” แต่เพื่อความเข้าใจที่ดีขึ้น เรามาทำซ้ำอีกครั้ง

    ข้อเสียของ XML DTD บน XML Schema

    1. ไวยากรณ์ภาษาแตกต่างจาก XML นั่นคือ DTD ไม่ใช่ XML ในเรื่องนี้การเข้ารหัสและการตรวจสอบเอกสาร XML อาจเกิดปัญหาต่าง ๆ
    2. ไม่มีการตรวจสอบประเภทข้อมูล มีข้อมูลเพียงประเภทเดียวใน XML DTD—สตริง ในการนี้ เช่น หากมีข้อความในช่องตัวเลข เอกสารก็จะยังผ่านการตรวจสอบ เนื่องจาก XML DTD ไม่สามารถตรวจสอบประเภทข้อมูลได้
    3. คุณไม่สามารถกำหนดคำอธิบาย DTD มากกว่าหนึ่งรายการให้กับเอกสาร XML หนึ่งเอกสารได้ นั่นคือสามารถตรวจสอบเอกสารได้ด้วยคำอธิบาย DTD เพียงคำอธิบายเดียวเท่านั้น หากมีหลายรายการ คุณจะต้องทำซ้ำคำอธิบายและรวมทุกอย่างไว้ในไฟล์เดียว ซึ่งไม่สะดวกมาก

    สิ่งเหล่านี้เป็นข้อบกพร่องหลักของ XML DTD ซึ่งได้รับการแก้ไขเรียบร้อยแล้วในมาตรฐานอุตสาหกรรมสำหรับการอธิบายเอกสาร XML, XML Schema

    XML Schema เป็นมาตรฐานอุตสาหกรรมสำหรับการอธิบายเอกสาร XML

    กล่าวโดยสรุป XML Schema ทำสิ่งต่อไปนี้:

    1. อธิบายชื่อขององค์ประกอบและคุณลักษณะ (พจนานุกรม)
    2. อธิบายความสัมพันธ์ระหว่างองค์ประกอบและคุณลักษณะ ตลอดจนโครงสร้าง (แบบจำลองเนื้อหา)
    3. อธิบายชนิดข้อมูล

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

    ตัวอย่าง XML Schema สำหรับการตรวจสอบความถูกต้องของเอกสาร XML

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

    ตัวอย่างของสคีมา XML อย่างง่าย

    เมื่อใช้สคีมานี้ คุณสามารถตรวจสอบเอกสาร XML ต่อไปนี้ได้

    <книга xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation = "book.xsd"> <название>พื้นฐาน XML <цена>300

    กลับไปที่สคีมา XML ของเรากัน ดังที่คุณสังเกตเห็นแล้วว่า XML ซึ่งเรารู้จักอยู่แล้วนั้นถูกใช้เพื่อสร้างสคีมา XML ข้อแตกต่างเพียงอย่างเดียวคือ XML Schema มีองค์ประกอบที่กำหนดไว้แล้ว ซึ่งแตกต่างจาก XML ทั่วไป ในเรื่องนี้ มีการใช้เนมสเปซ ในกรณีนี้ เนมสเปซที่ต้องการจะเป็น “http://www.w3.org/2001/XMLSchema” ซึ่งจะระบุโดยใช้คำนำหน้า “xs”

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

    ทีนี้เรามาดูวิธีถอดรหัสแผนภาพด้านบนกันดีกว่า ตามที่กล่าวไว้ข้างต้น XML Schema คือคำอธิบายของคำศัพท์และประเภทข้อมูล จากนี้เราจะถอดรหัสแต่ละองค์ประกอบ

    • — ประกาศองค์ประกอบ “หนังสือ” ด้วยประเภท “หนังสือ”
    • — ประกาศประเภทที่ซับซ้อนด้วยชื่อ “Book” (xs:complexType - สามารถมีองค์ประกอบที่ซ้อนกันได้)
    • – การประกาศทำรัง นั่นคือประเภทนั้นจะมีองค์ประกอบที่ซ้อนกัน
    • — ประกาศองค์ประกอบด้วยชื่อ “title” (ประเภทมาตรฐาน “string” - xs:string)
    • — ประกาศองค์ประกอบด้วยชื่อ “price” (ประเภทมาตรฐาน “number” - xs:decimal)

    อย่างที่คุณเห็นไม่มีอะไรซับซ้อนมากที่นี่ ถ้าคุณลองคิดดู ทุกอย่างก็ง่ายมาก

    องค์ประกอบ XML Schema พื้นฐาน

    โดยสรุป XML schema สามารถอธิบายได้ดังต่อไปนี้

    โครงการของคุณ

    ดังที่คุณเห็นจากตัวอย่าง แต่ละ XML schema ประกอบด้วยองค์ประกอบรูท “schema” และเนมสเปซที่จำเป็น “http://www.w3.org/2001/XMLSchema” ถัดมาเป็นคำอธิบายของวงจรและตัววงจรเอง ในเวลาเดียวกัน บ่อยครั้งในสคีมาคุณภาพสูง คำอธิบายจะมีขนาดใหญ่กว่าสคีมา XML มาก

    คำอธิบายขององค์ประกอบใน XML Schema

    ในตอนต้นของบทความ เราได้ดูตัวอย่าง XML schema แบบธรรมดาแล้ว ในนั้นเราได้อธิบายองค์ประกอบและประเภทแยกกัน ในเวลาเดียวกัน ฉันอยากจะทราบทันทีว่าซีเควนซ์ไม่ได้มีบทบาทที่นี่ โครงการนี้จะได้ผลในทุกกรณี

    ตอนนี้เรามาดูวิธีที่สองในการเขียน XML Schema ซึ่งอิงจากการอธิบายประเภททันทีภายในองค์ประกอบ วิธีนี้เหมาะสมหากคุณไม่ได้วางแผนที่จะใช้คำอธิบายเดียวกันสำหรับองค์ประกอบที่แตกต่างกัน เพื่อความชัดเจนเรามาดูตัวอย่างกัน

    ดังที่เห็นได้จากตัวอย่าง องค์ประกอบถูกประกาศโดยใช้ "องค์ประกอบ" โครงสร้างพิเศษโดยใช้คำนำหน้าที่เหมาะสม ในกรณีนี้ เรากำหนดองค์ประกอบที่เรียกว่า "root" โดยไม่ระบุประเภท เนื่องจากจะมีการอธิบายไว้ภายในองค์ประกอบ นั่นคือมีสองวิธีในการอธิบายองค์ประกอบ

    1 วิธี

    พิมพ์คำอธิบาย

    2 ทาง

    คำอธิบายของประเภทองค์ประกอบ

    คุณสามารถใช้ทั้งวิธีแรกและวิธีที่สอง พวกเขาทั้งหมดทำงานในลักษณะเดียวกัน คำถามเดียวคือความสะดวกในกรณีนี้

    นอกจากนี้ หลังจากประกาศองค์ประกอบแล้ว เราระบุว่าองค์ประกอบนั้นเป็นประเภทที่ซับซ้อน ( ) และรายการ ( ) องค์ประกอบที่ซ้อนกัน ในกรณีนี้ สิ่งเหล่านี้คือองค์ประกอบชื่อและอายุที่มีประเภท “xs:string” และ “xs:integer” คำนำหน้า xs หมายความว่าเป็นประเภทพื้นฐานที่กำหนดไว้แล้วในมาตรฐาน XML Schema

    อย่างที่คุณเห็นทุกอย่างค่อนข้างง่ายจนถึงตอนนี้ เราจะไม่ลงรายละเอียดทั้งหมดอีกครั้งเนื่องจากบทความนี้มีจุดมุ่งหมายเพื่อให้คุณคุ้นเคยกับ XML Schema และไม่ได้ศึกษาโดยละเอียด

    วิธีจับคู่ XML Schema และเอกสาร

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

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

    XML สคีมา

    เอกสารเอ็กซ์เอ็มแอล

    ทีนี้มาดูรายละเอียดแต่ละบรรทัดกัน

    • targetNamespace=”http://www.site.com” – ระบุว่า XML Schema นี้มีไว้สำหรับเนมสเปซใด
    • xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” – เราเชื่อมต่อเนมสเปซที่มีการอธิบายแอตทริบิวต์ “schemaLocation”
    • xsi:schemaLocation=”http://www.site.com/product.xsd” – เราระบุตำแหน่งที่จะพบสคีมาในกรณีที่ parser ไม่ทราบว่าอยู่ที่ไหน หากเอกสาร XML ไม่ได้เป็นของเนมสเปซใดๆ และดังนั้นจึงไม่มีการอ้างอิงถึงเอกสารนั้นในสคีมา ดังนั้นแอตทริบิวต์ "schemaLocation" จะถูกแทนที่ด้วย "noNamespaceSchemaLocation" (การอ้างอิงถึงสคีมาโดยไม่ต้องกำหนดเนมสเปซ)

    นั่นคือทั้งหมดที่ ขอให้โชคดีและประสบความสำเร็จในการเรียนรู้ XML!

    1. บทนำ

    หากท่านใดเคยลองเรียนรู้ XML ด้วยตัวเองแล้ว อาจจะเคยเจอแนวคิดชวนสับสนแบบเดิมๆ มากมายที่เคยเจอมา DTD, XML Schema, เนมสเปซ, XPath, XPointers, XSL, XSLT, DOM, SAX, SOAP ฉันยอมแพ้ ฉันจะเพิ่มเพียงว่าเนื้อหาเหล่านี้ส่วนใหญ่ขึ้นอยู่กับการใช้งาน ซึ่งโค้ดอาจมีข้อผิดพลาด อาจมีหลายวิธีในการปรับใช้และใช้งาน XML แต่ทั้งหมดนั้นค่อนข้างซับซ้อน และคุณรู้ไหมว่า XML นั้นง่ายมาก หากเราลืมเกี่ยวกับ DTD, XML Schemas, เนมสเปซ ฯลฯ
    ในความพยายามที่จะสอนวิธีทำงานกับ XML ให้คุณอย่างรวดเร็ว หากเป็นไปได้ ฉันจะเพิกเฉยต่อข้อมูลจำนวนพอสมควรที่คุณสามารถอ่านได้ในวรรณกรรมที่เกี่ยวข้อง และสิ่งแรกที่ฉันจะมองข้ามคือเนมสเปซและสคีมา สิ่งนี้อาจดูแปลกสำหรับคุณ เนื่องจากหนังสือส่วนใหญ่เริ่มต้นด้วยการอธิบายแนวคิดเหล่านี้ แต่พยายามคิดว่า XML เป็นวิธีการในการแก้ปัญหาเฉพาะ เช่น ค้อน คุณจำเป็นต้องรู้วิธีสร้างบ้านโดยใช้ค้อนจริงหรือ? จะเป็นอย่างไรหากฉันต้องการเพียงแค่ตอกตะปูเพื่อแขวนรูปภาพ? เช่นเดียวกับ XML ซึ่งอาจซับซ้อนมาก ทั่วไปพอที่จะใช้ในแอปพลิเคชันนับร้อยหรือนับพัน และง่ายมากหากคุณไม่ใส่ใจกับบางสิ่ง ในบทความนี้ ฉันจะเน้นที่การแก้ปัญหาเฉพาะโดยใช้ XML
    แล้วปัญหาคืออะไรกันแน่? สมมติว่าฉันต้องการอธิบายวัตถุธรรมดา เช่น แก้ว โดยใช้ XML ทำไมฉันถึงใช้ XML เพื่อสิ่งนี้? ก่อนอื่นเลย นั่นคือสิ่งที่ XML ได้รับการออกแบบมาเพื่อ XML อธิบายข้อมูล ในตัวอย่างของฉัน แก้วคือข้อมูล ในชีวิตจริง ข้อมูลอาจเป็นเอกสาร Word สเปรดชีต รูปภาพ หนังสือ บันทึกฐานข้อมูล หรือแม้แต่คลาส C++ หรือ Visual Basic ประการที่สอง XML สามารถขยายได้ XML ช่วยให้ฉันสร้างคุณลักษณะได้มากเท่าที่จำเป็นเพื่ออธิบายข้อมูล และคุณลักษณะเหล่านี้จะเป็นอะไรก็ได้ที่ฉันต้องการ และสุดท้าย เนื่องจาก XML กำลังกลายเป็นมาตรฐานอย่างรวดเร็ว หากมีสิ่งมีชีวิตบนดาวอังคาร คุณสามารถมั่นใจได้ว่าพวกเขาจะสามารถเข้าใจไฟล์ XML ของฉันที่นั่นได้

    คุณสมบัติพื้นฐานอะไรที่ทำให้เราสามารถอธิบายแก้วได้?

    สิ่งเดียวกันจะมีลักษณะอย่างไรในรูปแบบ XML

    กระจก 6 16 ก้อนน้ำแข็ง หลอด น้ำ ใช่

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

    กฎ XML #1: ไฟล์ XML ที่ถูกต้องจะต้องตรงกับสคีมาของมันทุกประการ แต่เพื่อความสะดวกในการทำความเข้าใจเนื้อหา ไม่มีตัวอย่างใดของฉันที่จะใช้ไดอะแกรม พูดอย่างเคร่งครัด ไม่มีตัวอย่างใดของฉันที่ "เพียงพอ" แต่จริงๆ แล้ว ฉันไม่สนใจหรอก ฉันจะไม่สร้างบ้าน ฉันแค่ต้องแขวนรูปภาพ ฉันจะพูดถึงเรื่องนี้เพิ่มเติมในภายหลังเมื่อเราพูดถึง XML Document Object Model

    กฎ XML #2หมายเหตุ: หากคุณเขียนโปรแกรมใน VB โปรดจำไว้ว่า XML คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ XML คำนึงถึงขนาดตัวพิมพ์ XML คำนึงถึงขนาดตัวพิมพ์ XML คำนึงถึงขนาดตัวพิมพ์ เขียนประโยคนี้ 1,000 ครั้ง แล้วคุณจะไม่มีวันลืม

    กฎ XML #3: โดยทั่วไปแท็กจะเรียกว่าองค์ประกอบ และแท็กเปิดแต่ละแท็กจะต้องมีแท็กปิดที่สอดคล้องกัน ตามกฎนี้ คุณจะได้รับไฟล์ XML ที่ถูกต้อง สิ่งนี้สำคัญมากเพราะจนกว่าไฟล์ XML จะได้รับการจัดรูปแบบอย่างถูกต้อง ไฟล์นั้นจะไม่ถูกแยกวิเคราะห์และโหลดลงใน Document Object Model โปรดทราบว่าหากองค์ประกอบไม่มีค่าและไม่มีองค์ประกอบอื่น (ซ้อนกัน) แท็กปิดอาจมีลักษณะเช่นนี้ แทนที่จะเป็นดีไซน์ที่เทอะทะ - คุณสามารถเห็นแนวทางนี้ได้ในตัวอย่างก่อนหน้า ( ).

    กฎ XML #4: องค์ประกอบสามารถมีแอตทริบิวต์ได้ และค่าแอตทริบิวต์จะต้องอยู่ในเครื่องหมายคำพูด (เดี่ยวหรือคู่)

    กฎ XML #5: คุณสามารถใช้ชื่อแอตทริบิวต์ได้หลายครั้ง แต่ชื่อองค์ประกอบจะต้องไม่ซ้ำกันตลอดทั้งไฟล์ ในตัวอย่างก่อนหน้านี้ แอตทริบิวต์ qty มีความหมายที่แตกต่างกัน ขึ้นอยู่กับองค์ประกอบที่ใช้ ,, หรือ - ความหมายของแอตทริบิวต์ขึ้นอยู่กับบริบทของการใช้งาน ในขณะที่ค่าขององค์ประกอบหมายถึงสิ่งเดียวกันเสมอ ไม่ว่าแอตทริบิวต์จะอยู่ที่ใดในไฟล์ก็ตาม ในตัวอย่างก่อนหน้านี้ องค์ประกอบ และ มีความหมายเหมือนกันตลอดทั้งเอกสารของเรา เช่น ใช้เพื่ออธิบายความสูงของแก้วเสมอ

    กฎ XML #6: มีอักขระพิเศษหลายตัวใน XML ที่ไม่สามารถใช้ได้โดยตรง เนื่องจากถูกสงวนไว้ในไวยากรณ์ XML ดังนั้นในการใช้อักขระดังกล่าว คุณจะต้องใช้โครงสร้างที่สงวนไว้โดยเริ่มต้นด้วยอักขระ & และโค้ดพิเศษ (อักขระ & ต้องเขียนเป็น &) (อักขระ " ต้องเขียนเป็น ") (อักขระ< должен писаться как <) (символ >ต้องเขียนเป็น >) และ (สัญลักษณ์ " ต้องเขียนเป็น ") คุณสามารถใช้คำแนะนำแทนได้โดยที่ "...." สามารถเป็นลำดับอักขระใดก็ได้ ยกเว้น "]]>" โครงสร้างนี้สามารถปรากฏได้ทุกที่ แต่ไม่สามารถซ้อนกันได้

    2. โมเดลออบเจ็กต์เอกสาร XML

    XML Document Object Model ช่วยให้โปรแกรมเมอร์สามารถโหลดเนื้อหาของไฟล์ XML ลงในหน่วยความจำได้ เมื่อโหลดไฟล์ XML ด้วยวิธีนี้ จะสามารถจัดการได้โดยใช้คุณสมบัติ วิธีการ และเหตุการณ์ของ Document Object Model นี่คือจุดที่ XML มีประโยชน์ Document Object Model ช่วยอำนวยความสะดวกในการดึงและประมวลผลข้อมูลไฟล์ XML อย่างมาก ฉันจะไม่พูดที่นี่เกี่ยวกับความสามารถทั้งหมดของโมเดลออบเจ็กต์เอกสาร ฉันจะพูดถึงคุณสมบัติหลักบางประการที่จะช่วยให้บรรลุเป้าหมายของบทความนี้เท่านั้น ฉันจะนำไฟล์ XML ที่ฉันเพิ่งสร้างขึ้นเพื่ออธิบายแก้ว โหลดลงใน Document Object Model และทำบางสิ่งกับมัน ฉันจะบันทึกคุณสมบัติและความสามารถที่เหลือของโมเดลออบเจ็กต์เอกสารสำหรับบทความถัดไปซึ่งพูดถึงไคลเอนต์ XML โปรดทราบว่าแม้ว่าโมเดลออบเจ็กต์เอกสารจะดีและสะดวกสำหรับนักพัฒนา แต่ก็ต้องใช้ทรัพยากรระบบจำนวนมากพอสมควร ดังนั้นจึงมีวิธีอื่นในการแยกวิเคราะห์ไฟล์ XML ที่เรียกว่า SAX บทความของฉันไม่ได้อ้างว่าเป็นแหล่งข้อมูลที่ครบถ้วนสมบูรณ์เกี่ยวกับปัญหานี้ ดังนั้นจึงอาจเป็นประโยชน์หากใช้ XML SDK ด้วย

    ลองดูตัวอย่างโดยใช้ตัวแยกวิเคราะห์ XML ของ Microsoft เวอร์ชัน 3.0 (msxml3.dll) เพื่อทำความเข้าใจวิธีการทำงานทั้งหมด หากคุณไม่มีเครื่องวิเคราะห์ สามารถดาวน์โหลดเวอร์ชันล่าสุดได้จากเว็บไซต์ Microsoft
    สมมติว่าฉันบันทึกตัวอย่างคำอธิบายของ cup ในรูปแบบ XML ในไฟล์ "http://web_server/xml/cup.xml" (พาธในเครื่อง C:\inetpub\wwwroot\xml\cup.xml) และตอนนี้ฉันต้องการ โหลดลงในโมเดลออบเจ็กต์เอกสาร รหัสต่อไปนี้ถือว่าเครื่องวิเคราะห์ถูกโหลดและทำงานอยู่แล้ว

    รหัส Visual Basic 6.0:(สร้างการเชื่อมต่อกับ Microsoft XML, v3.0) Dim xmlDoc เป็น MSXML2.DOMDocument30 ตั้ง xmlDoc = DOMDocument30 ใหม่ xmlDoc.async = False xmlDoc.validateOnParse = False xmlDoc.load ("c:\inetpub\wwwroot\xml\cup.xml" ) msgBox xmlDoc.xml รหัสฝั่งเซิร์ฟเวอร์ ASP ใน Visual Basic: Dim xmlDoc Set xmlDoc = Server.CreateObject("Msxml2.DOMDocument.3.0") xmlDoc.async = False xmlDoc.validateOnParse = False xmlDoc.load "/xml/cup.xml" รหัสฝั่งเซิร์ฟเวอร์ ASP ในจาวาสคริปต์: var xmlDoc = Server.CreateObject("Msxml2.DOMDocument.3.0"); xmlDoc.async = เท็จ; xmlDoc.validateOnParse = เท็จ; xmlDoc.load("/xml/cup.xml");

    คำอธิบายของโค้ดด้านบน - มาดูโค้ด VB6 กัน

    บรรทัดที่ 1:หรี่ xmlDoc เป็น MSXML2.DOMDocument30

    ในบรรทัดแรกนี้ เรากำหนดการอ้างอิงถึง "Microsoft XML, v3.0" ในบรรทัดนี้ ฉันกำหนดตัวแปร xmlDoc เป็นการอ้างอิงไปยังเอกสาร XML MSXML2 เป็นไลบรารี (ใช้ชื่อนั้น อย่าพยายามเขียน MSXML3 มันจะใช้งานไม่ได้) DOMDocument30 กำหนดวัตถุเอกสาร XML ที่สอดคล้องกับเวอร์ชัน 3.0 คุณอาจเห็นโค้ดนี้: dim xmlDoc as MSXML2.DOMDocument โดยทั่วไปโครงสร้างนี้จะใช้เมื่อคุณไม่ต้องการระบุเวอร์ชันเฉพาะของเอกสาร XML ในกรณีนี้ เครื่องวิเคราะห์เริ่มต้นที่ลงทะเบียนไว้ในระบบจะถูกนำมาใช้ ปัญหาเดียวอาจเป็นได้ว่าเวอร์ชันของเครื่องวิเคราะห์ที่ลงทะเบียนไว้ตามค่าเริ่มต้นอาจแตกต่างกันในคอมพิวเตอร์แต่ละเครื่อง หากคุณต้องการแน่ใจว่าโค้ดที่คุณเขียนจะใช้ได้กับเครื่องวิเคราะห์เวอร์ชันใดๆ ก็ตาม อย่าใช้โครงสร้างที่เฉพาะเจาะจงสำหรับเวอร์ชันของเครื่องวิเคราะห์โดยเฉพาะ เนื่องจากไม่มีการรับประกันว่าผู้ใช้ที่จะใช้โค้ดของคุณจะได้รับการติดตั้งตัววิเคราะห์เวอร์ชันเดียวกันกับที่คุณเขียนโค้ด ข้อดีอีกประการหนึ่งของการพัฒนาโค้ดที่เป็นเวอร์ชันที่ไม่ขึ้นอยู่กับตัววิเคราะห์ก็คือ เมื่อมีการเปิดตัวตัววิเคราะห์เวอร์ชันใหม่กว่า ตัววิเคราะห์จะเข้ากันได้แบบย้อนหลังกับเวอร์ชันก่อนหน้า และคุณไม่จำเป็นต้องคอมไพล์โค้ดของคุณใหม่

    บรรทัดที่ 2:ตั้งค่า xmlDoc = DOMDocument30 ใหม่

    บรรทัดนี้เตรียมข้อมูลเบื้องต้นตัวแปร xmlDoc เป็นอินสแตนซ์ใหม่ของอ็อบเจ็กต์เอกสาร XML เวอร์ชัน 3.0

    บรรทัดที่ 3: xmlDoc.async = เท็จ

    ไฟล์ XML สามารถโหลดได้แบบซิงโครนัสหรือแบบอะซิงโครนัส ถ้า xmlDoc.async = False หมายความว่าเนื้อหาของไฟล์ XML จะถูกโหลด และหลังจากการควบคุมนั้นจะถูกโอนไปยังกระบวนการเรียกเท่านั้น ถ้า xmlDoc.async = True หมายความว่าการควบคุมจะถูกโอนไปยังกระบวนการเรียกทันที โดยไม่ต้องรอจนกว่าเนื้อหาของไฟล์ XML จะโหลดเสร็จสมบูรณ์

    บรรทัดที่ 4: xmlDoc.validateOnParse = เท็จ

    รหัสนี้บ่งชี้ว่า parser ไม่ควรตรวจสอบไฟล์ XML ที่กำลังโหลดกับสคีมา (validateOnParse = False) เพื่อเปิดใช้งานการตรวจสอบการปฏิบัติตามสคีมา คุณต้องเขียน validateOnParse = True

    บรรทัดที่ 5: xmlDoc.load("C:\inetpub\wwwroot\xml\cup.xml")

    บรรทัดนี้เรียกวิธีการโหลดไฟล์ XML ที่ระบุ วิธีการโหลดมี 2 แบบ อันแรกซึ่งเขียนในบรรทัดที่ 5 โหลดไฟล์ลงในโมเดลออบเจ็กต์เอกสาร และจำเป็นต้องส่งเส้นทางแบบเต็มไปยังไฟล์ XML ตัวเลือกการโหลดที่สองเกี่ยวข้องกับการส่งสตริง xml เป็นพารามิเตอร์ การโหลดประเภทนี้สามารถเรียกได้ เช่น: xmlDoc.loadXML("valid xml string") ฉันจะแสดงวิธีการใช้วิธีนี้ในภายหลัง

    บรรทัดที่ 6: MsgBox xmlDoc.xml

    บรรทัดนี้แสดงเนื้อหาของไฟล์ XML ที่ดาวน์โหลด เป็นผลให้เราควรได้รับไฟล์ XML ต้นฉบับที่เราสร้างไว้ก่อนหน้านี้

    2.2. การสำรวจโมเดลออบเจ็กต์เอกสาร XML

    สร้างโครงการใหม่ใน Visual Basic และตั้งชื่อเป็น standard.exe วางโค้ดด้านบนลงในวิธีการโหลดหน้าต่างหลักของโปรเจ็กต์ของคุณ ตรวจสอบให้แน่ใจว่าคุณประกาศการอ้างอิงถึง "Microsoft XML v3.0" โดยคลิก Project-->References จากนั้นเลื่อนลงมาตามรายการที่ปรากฏขึ้นและค้นหาลิงก์ที่ต้องการ โปรดทราบว่าจะต้องติดตั้งเครื่องวิเคราะห์เวอร์ชัน 3.0 บนคอมพิวเตอร์ของคุณ ไม่เช่นนั้นจะไม่ปรากฏในรายการ ตั้งค่าเบรกพอยต์ในบรรทัดสุดท้ายของโค้ด (msgbox xmlDoc.xml) เรียกใช้แอปพลิเคชันในโหมดแก้ไขข้อบกพร่อง เมื่อกระบวนการดำเนินการถึงจุดหยุด ให้เรียกหน้าต่าง "Locals" และดูที่โมเดลออบเจ็กต์เอกสาร คุณสามารถเรียนรู้ได้มากมายจากการดูสิ่งที่แสดงในหน้าต่างนี้ หน้าต่าง "Locals" ควรมีลักษณะคล้ายกับภาพด้านล่าง ต่อไปนี้เป็นคุณสมบัติที่น่าสนใจของ Document Object Model

    โมเดลออบเจ็กต์เอกสาร XML จะมีโหนดระดับบนสุดสองโหนดเสมอ:

    • Item1 เป็นรากของสาขาองค์ประกอบเอกสาร (ไม่ต้องสนใจ)
    • จริงๆ แล้ว Item2 เป็นองค์ประกอบแรกของเอกสาร (จำสิ่งนี้ไว้)

    nodeName หรือ baseName - สามารถใช้เมื่อค้นหาชื่อขององค์ประกอบหรือแอตทริบิวต์
    nodeType - ใช้เพื่อรับประเภทของโหนดปัจจุบัน
    nodeValue - ใช้เพื่อค้นหาค่าของข้อมูลโหนด
    childNodes คือชุดของโหนดย่อย พวกเขาสามารถเป็นโหนดองค์ประกอบ โหนดข้อความ และโหนด CDATA อาจมีโหนดประเภทอื่นๆ ซึ่งฉันจะไม่พูดถึงในตอนนี้ แต่คุณสามารถเรียนรู้ทั้งหมดเกี่ยวกับโหนดเหล่านั้นได้ใน XML SDK
    คุณลักษณะคือชุดของโหนดแอตทริบิวต์สำหรับองค์ประกอบปัจจุบัน
    ความยาว - ใช้เพื่อกำหนดจำนวนโหนดในแผนผังที่เป็นของโหนดปัจจุบันโดยตรง
    xml - คุณสมบัตินี้มีอยู่ในทุกโหนดและสามารถใช้เพื่อแสดงถึงตำแหน่งปัจจุบันในเอกสาร สตริง XML เริ่มต้นที่โหนดปัจจุบันและลงไปที่ส่วนท้ายของแผนผัง นี่เป็นคุณสมบัติที่มีประโยชน์มาก ทดลองกับมันและดูว่าเกิดอะไรขึ้น

    2.2.2. โหนดองค์ประกอบ

    โหนดองค์ประกอบสามารถมีโหนดย่อยขององค์ประกอบ คุณลักษณะ ข้อความ หรือ CDATA จากรูปด้านล่าง คุณสามารถดูข้อมูลต่อไปนี้เกี่ยวกับโหนด "SOLID":

    nodeType - ประเภทโหนดปัจจุบัน = NODE_ELEMENT - เช่น โหนดปัจจุบันเป็นองค์ประกอบ
    nodeName หรือ baseName หรือ tagName - ชื่อของโหนดปัจจุบัน (องค์ประกอบ) = SOLID
    องค์ประกอบหลัก สารบัญ มีลูก 4 คน
    ดังที่เห็นได้จากรูปต่อไปนี้ แต่ SOLID มีลูกหนึ่งตัวซึ่งเป็นชนิดข้อมูลข้อความ
    text - "ice cube" เป็นวิธีทางลัดที่ช่วยให้คุณได้รับค่าของโหนดปัจจุบันโดยไม่ต้องย้ายไปยังโหนดข้อความลูก

    2.2.3. โหนดแอตทริบิวต์

    โหนดแอตทริบิวต์สามารถประกอบด้วยข้อความหรือโหนดย่อย CDATA เท่านั้น รูปต่อไปนี้แสดงข้อมูลที่สามารถรับได้เกี่ยวกับโหนด "qty":

    nodeType - ประเภทของโหนดปัจจุบัน = NODE_ATTRIBUTE - โหนดปัจจุบันเป็นแอตทริบิวต์
    nodeName หรือ baseName - ชื่อของโหนดปัจจุบัน (แอตทริบิวต์) = จำนวน

    จากรูปต่อไปนี้ เป็นที่ชัดเจนว่า qty มีรายการย่อยหนึ่งรายการซึ่งมีประเภทข้อมูลข้อความ
    ข้อความหรือค่า - "2" เป็นวิธีทางลัดที่ช่วยให้คุณได้รับค่าของโหนดปัจจุบันโดยไม่ต้องย้ายไปยังโหนดข้อความลูก

    2.2.4. โหนดข้อความและ CDATA

    โหนดข้อความหรือ CDATA ไม่มีลูก โหนดข้อความประกอบด้วยข้อมูลข้อความที่ประมวลผลของโหนดหลัก CDATA มีข้อมูลข้อความดิบของโหนดหลัก โหนด CDATA ถูกสร้างขึ้นเมื่อมีการจัดเฟรมข้อมูลในไฟล์ XML ด้วยวิธีพิเศษ ป้ายกำกับ CDATA บอกให้ parser ไม่ต้องแยกวิเคราะห์ข้อมูล และให้ยอมรับอักขระภายในป้ายกำกับเป็นข้อมูล ส่วน CDATA มีประโยชน์อย่างยิ่งเมื่อคุณต้องการแทรกโค้ดภายในไฟล์ XML รูปต่อไปนี้แสดงข้อมูลที่สามารถรับได้จากโหนดข้อความปัจจุบัน:

    nodeType - ประเภทของโหนดปัจจุบัน = NODE_TEXT - โหนดปัจจุบันมีข้อมูลข้อความ
    nodeName - ชื่อของโหนดปัจจุบัน (ข้อความ) = #text - โหนดข้อความทั้งหมดเรียกว่า #text
    ข้อมูลหรือข้อความหรือค่า - "2" คือข้อมูลโหนดปัจจุบัน

    2.2.5. ข้อผิดพลาดในการโหลดเอกสาร

    ส่วน parseError ของโมเดลอ็อบเจ็กต์เอกสารมีประโยชน์ในการระบุปัญหาที่เกิดขึ้นเมื่อโหลดเอกสาร XML ถ้าฉันลบแท็กปิดออกจาก OTHER ในไฟล์ตัวอย่างของเรา และลองรันโปรแกรมอีกครั้ง ฉันจะได้รับผลลัพธ์ดังต่อไปนี้ ข้อมูลที่เป็นประโยชน์ชิ้นแรกคือ nextSibling ของเราตอนนี้มีค่า Nothing ตอนนี้ ถ้าคุณดูที่ childNodes คุณจะเห็นว่าฟิลด์ความยาวตอนนี้เป็น 0 สัญญาณทั้งสองนี้บ่งชี้ว่าเอกสาร XML ของเราไม่ได้โหลด เพื่อหาสาเหตุ ฉันเปิดโหนด parseError และรับข้อมูลข้อผิดพลาดทั้งหมด

    ฉันได้แสดงให้คุณเห็นถึงวิธีการโหลดไฟล์ XML ลงใน Document Object Model แล้วคุณจะทำอย่างไรกับมันที่นั่น หนึ่งในคุณสมบัติหลักที่คุณสามารถใช้ได้คือดำเนินการสืบค้นต่างๆ ในเอกสาร XML ในการทำเช่นนี้ คุณสามารถดูเอกสารทั้งหมดได้จนกว่าคุณจะพบข้อมูลที่คุณกำลังมองหา แต่วิธีที่ได้รับความนิยมมากที่สุดคือการใช้หนึ่งในสองวิธีของคลาส DOMDocument สองวิธีที่ใช้ในการค้นหาโหนดในตัวอย่างก่อนหน้าของเราอาจมีลักษณะดังนี้ xmlDoc.SelectSingleNode(patternString) เพื่อรับโหนดที่เราต้องการ หรือ xmlDoc.SelectNodes(patternString) เพื่อรับรายการโหนดที่เราต้องการ พารามิเตอร์ patternString เป็นคำขอที่แน่นอน สามารถเกิดขึ้นได้ด้วยวิธีใดวิธีหนึ่งจากสองวิธี ไม่ว่าจะเป็นคำขอ XSL หรือคำขอ XPath วิธีที่ใหม่กว่าและเป็นที่ต้องการในการสืบค้นเอกสาร XML คือ XPath ต้องตั้งค่ารูปแบบ patternString ล่วงหน้า ก่อนที่จะเรียกวิธีการร้องขอข้อมูลวิธีใดวิธีหนึ่งจากสองวิธีเป็นครั้งแรก มิฉะนั้น วิธีการสร้างคำขอ XSL จะถูกใช้เป็นค่าเริ่มต้น หากต้องการตั้งค่าประเภทรูปแบบของ patternString ให้ใช้ setProperty("SelectionLanguage", "format") หากต้องการเปลี่ยนข้อความค้นหาในตัวอย่างของเราเพื่อใช้วิธี XPath ฉันจะเพิ่มคำสั่งต่อไปนี้: setProperty("SelectionLanguage","XPath") ในความคิดของฉัน XPath เป็นเทคโนโลยี XML ที่สำคัญที่สุดในการเรียนรู้ ฉันจะให้แบบสอบถาม XPath ง่ายๆแก่คุณ สถานที่ที่ดีในการเริ่มต้นเรียนรู้เทคโนโลยีนี้คือ Microsoft XML SDK อีกวิธีหนึ่งในการอธิบายนี้คือการเขียนแอปพลิเคชัน Visual Basic ง่ายๆ ที่ให้คุณป้อนคำสั่งและแสดงผลลัพธ์ คุณอาจพบแอปฟรีบางแอปที่ทำสิ่งเดียวกัน แต่ XPath ยังค่อนข้างใหม่และอาจไม่ได้รับการสนับสนุนอย่างสมบูรณ์จากแอปเหล่านั้น

    2.3.1. การใช้ XPATH เพื่อสืบค้น Document Object Model

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

    ยอดเยี่ยม! ตอนนี้เราขอเพิ่มอีกคำถามหนึ่งที่จะทำให้เราสามารถระบุได้ว่าแก้วมีฝาปิดหรือไม่ เพิ่มรหัสต่อไปนี้ที่ส่วนท้ายของรหัสก่อนหน้า:

    ตั้งค่า objNode = xmlDoc.selectSingleNode("/CUP/LID") ถ้า objNode.text="yes" ดังนั้น MsgBox "We have a lid" else MsgBox "No lid on this cup" สิ้นสุดถ้า

    มาดูโค้ดกันทีละบรรทัด:

    บรรทัดที่ 1: หรี่ objNode เป็น IXMLDOMNode

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

    บรรทัดที่ 2: หรี่ objListOfNodes เป็น IXMLDOMNodeList

    บรรทัดนี้กำหนดตัวแปร objListOfNodes ซึ่งมีประเภทของรายการของโหนดเอกสาร XML (กลุ่มของโหนด)

    บรรทัดที่ 3: xmlDoc.setProperty "SelectionLanguage", "XPath"

    บรรทัดนี้กำหนดวิธีสร้าง patternString เป็น XPath

    บรรทัดที่ 4: MsgBox "ถ้วยของคุณมีรายการดังต่อไปนี้:"

    บรรทัดที่ 5: ตั้งค่า objListOfNodes = xmlDoc.selectNodes("//CONTENTS/*[@qty>0]")

    บรรทัดนี้ดำเนินการค้นหา XPath ที่จะส่งคืนกลุ่มของโหนดและเก็บไว้ในตัวแปร objListOfNodes คำขอแบ่งออกเป็นส่วนต่างๆ ดังต่อไปนี้:

    • //สารบัญ - นำองค์ประกอบสารบัญทั้งหมดในเอกสาร XML หมายเหตุ: // เป็นการชวเลขสำหรับเนื้อหาทั้งหมดของเอกสาร XML
    • /* - จากรายการองค์ประกอบ CONTENTS นำองค์ประกอบสืบทอดทั้งหมด (* - ใช้เพื่อระบุทั้งหมด) ซึ่งจะลดผลลัพธ์เหลือโหนดองค์ประกอบสี่โหนด ( - โหนดทั้งสี่นี้อยู่ภายใต้โหนดเนื้อหาโดยตรง
    • [@qty>0] - ตรวจสอบแต่ละองค์ประกอบลูกเพื่อให้แน่ใจว่าแอตทริบิวต์จำนวน (@ - หมายถึงแอตทริบิวต์) มากกว่า 0 หากไม่ตรงตามเงื่อนไขนี้ โหนดจะถูกละทิ้ง ทุกอย่างในคำขอ XPath สามารถรับค่า True หรือ False ได้ หากผลลัพธ์เป็น True โหนดจะถูกบันทึก หากผลลัพธ์เป็นเท็จ แสดงว่าโหนดนั้นถูกละทิ้ง หลังจากนี้ผลลัพธ์ของเราจะลดลงเหลือสามโหนด (

    บรรทัดที่ 6-8: สำหรับแต่ละ objNode ใน objListOfNodes / MsgBox objNode.Text / Next

    แถวเหล่านี้แสดงค่าของแต่ละโหนดองค์ประกอบที่ตรงกับแบบสอบถาม ("น้ำแข็ง" , "ฟาง" , "น้ำ")

    บรรทัดที่ 9: ตั้งค่า objNode = xmlDoc.selectSingleNode("/CUP/LID")

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

    บรรทัดที่ 10-15: ถ้า objNode.text="yes" ดังนั้น / MsgBox "เรามีฝาปิด" /
    else / MsgBox "ถ้วยนี้ไม่มีฝาปิด" /จบถ้า

    บรรทัดนี้แสดงข้อความ "เรามีฝาปิด" เนื่องจากคุณสมบัติข้อความ LID ขององค์ประกอบคือ "ใช่"

    3. แปลง ADO เป็น XML

    ตอนนี้คุณเข้าใจพื้นฐานของ XML แล้ว มาสร้างตัวควบคุม ActiveX ที่จะแปลงชุดข้อมูล ADO เป็นรูปแบบ XML กันดีกว่า เป้าหมายคือการดึงชื่อหนังสือจากตารางชื่อเรื่องของฐานข้อมูล Pubs และส่งคืนในรูปแบบ XML ฉันจะใช้ผลลัพธ์ในบทความถัดไป คุณสามารถพูดได้ว่า ADO มีวิธีการของตัวเองในการบันทึกผลลัพธ์ในรูปแบบ XML ใช่ไหม ใช่ แต่หากฉันมอบสิ่งนี้ให้กับ ADO ฉันจะได้ไฟล์ XML ในรูปแบบที่แย่มากจนใช้งานไม่ได้ ADO จะสร้างไฟล์ XML โดยใช้เนมสเปซ และตอนนี้ฉันไม่ต้องการมันแล้ว ประการที่สอง ADO จะสร้างไฟล์ XML ซึ่งจะแสดงในรูปแบบของแอตทริบิวต์ กล่าวอีกนัยหนึ่ง ทุกบันทึกจะกลายเป็นองค์ประกอบ และทุกฟิลด์จะมีแอตทริบิวต์:

    แต่ฉันต้องการรับไฟล์ XML ในรูปแบบขององค์ประกอบ โดยที่แต่ละรายการจะอยู่ในแท็ก และแต่ละฟิลด์จะเป็นองค์ประกอบภายในแท็ก - ไวยากรณ์สตริง XML ของฉันจะเป็น:

    ข้อมูลจากตาราง ข้อมูลจากตาราง ข้อมูลจากตาราง ข้อมูลจากตาราง ข้อมูลจากตาราง ข้อมูลจากตาราง ข้อมูลจากตาราง

    อีกอย่าง สิ่งที่ฉันเพิ่งทำคือสร้างสคีมาสำหรับสตริง XML ของฉัน ตอนนี้ หากฉันต้องตรวจสอบโครงสร้างของเอกสาร XML กับสคีมา สิ่งที่ฉันต้องทำคือแปลงสคีมาเป็นรูปแบบที่ถูกต้อง นั่นคือในรูปแบบ DTD หรือ XDR โปรดสังเกตว่าฉันได้เพิ่มคุณลักษณะบางอย่างให้กับแต่ละองค์ประกอบ - เหตุผลประการหนึ่งก็คือลูกค้าสามารถใช้ข้อมูลนี้ได้ Prettyname สามารถใช้เป็นป้ายกำกับข้อมูลได้ แอตทริบิวต์ประเภทข้อมูลสามารถนำมาใช้สำหรับการตรวจสอบข้อมูลฝั่งไคลเอ็นต์ แต่พูดตามตรง เหตุผลที่แท้จริงที่แอตทริบิวต์เหล่านี้มีอยู่ก็เพราะว่าแอตทริบิวต์เหล่านี้มีวัตถุประสงค์พิเศษในเทมเพลตไฟล์ XSL ที่ฉันมักจะใช้เพื่อสร้างคำสั่ง Where ของการสืบค้น SQL บางทีฉันอาจจะเผยแพร่บทความที่สาธิตแนวทางนี้ในไม่ช้า เทมเพลตนี้มีประโยชน์มากจริงๆ เมื่อนำโครงสร้าง XML ไปใช้กับข้อมูลจากตาราง Titles ผลลัพธ์จะมีลักษณะดังนี้:

    คู่มือฐานข้อมูลของ Busy Executive BU1032 คู่มือฐานข้อมูลของ Busy Executive ธุรกิจ 19.99 4095 ภาพรวมของระบบฐานข้อมูลที่มีอยู่โดยเน้นการใช้งานทางธุรกิจทั่วไป ภาพประกอบ. 6/12/1991 การทำอาหารด้วยคอมพิวเตอร์: งบดุลที่แอบแฝง BU1111 การทำอาหารด้วยคอมพิวเตอร์: งบดุลที่แอบแฝง ธุรกิจ 11.95 3876 คำแนะนำที่เป็นประโยชน์เกี่ยวกับวิธีใช้ทรัพยากรอิเล็กทรอนิกส์ของคุณให้เกิดประโยชน์สูงสุด 6/9/1991

    ตอนนี้ฉันมีเรื่องต้องจัดการแล้ว!

    รายการ 1 - CUP.XML

    กระจก 6 16 ก้อนน้ำแข็ง หลอด น้ำ ใช่

    Dim xmlDoc As MSXML2.DOMDocument30 Set xmlDoc = DOMDocument30 ใหม่ xmlDoc.async = False xmlDoc.validateOnParse = False xmlDoc.Load ("c:\inetpub\wwwroot\xml\cup.xml") MsgBox xmlDoc.xml Dim objNode As IXMLDOMNode Dim objListOfNodes เนื่องจาก IXMLDOMNodeList xmlDoc.setProperty "SelectionLanguage", "XPath" MsgBox "ถ้วยของคุณประกอบด้วยรายการต่อไปนี้" ตั้งค่า objListOfNodes = xmlDoc.selectNodes("//CONTENTS/*[@qty>0]") สำหรับแต่ละ objNode ใน objListOfNodes MsgBox objNode ข้อความถัดไป ตั้งค่า objNode = xmlDoc.selectSingleNode("/CUP/LID") ถ้า objNode.Text = "ใช่" จากนั้น MsgBox "เรามีฝาปิด" อื่น MsgBox "ไม่มีฝาบนถ้วยนี้" สิ้นสุดถ้า

    รายการ 3 - ตัวควบคุม ActiveX: ADO ใน XML (WebClass.dll)(xmlControl.cls)

    ตัวเลือกที่ชัดเจน "ประกาศตัวแปรฐานข้อมูลส่วนตัว m_dbConnection เป็น ADODB ใหม่ การเชื่อมต่อส่วนตัว m_dbCommand เป็น ADODB.Command ส่วนตัว m_adoRs เป็น ADODB.Recordset ส่วนตัว m_adoErrors เป็น ADODB.Errors ส่วนตัว m_adoErr เป็นข้อผิดพลาด สาธารณะ nCommandTimeOut เป็นตัวแปรสาธารณะ nConnectionTimeOut เป็นตัวแปร สาธารณะ strConnect เป็นตัวแปรสาธารณะ strAppName เป็น สตริงสาธารณะ strLogPath As สตริงสาธารณะ strDatabase As สตริงสาธารณะ strUser As สตริงสาธารณะ strPassword เป็นสตริงสาธารณะ strServer เป็นสตริงสาธารณะ strVersion เป็นสตริงสาธารณะ lMSADO เป็นบูลีน "ส่วนตัวตัวแปรโกลบอลส่วนตัว gnErrNum เป็นตัวแปรส่วนตัว gstrErrDesc เป็นตัวแปรส่วนตัว gstrErrSrc เป็นตัวแปรส่วนตัว gstrDB As สตริงส่วนตัว gstrADOError As String Private Const adLeonNoRecordset As Integer = 129 Private gtableName(6) As String Private gcolumnName(6) As String Private gprettyName(6) As String Private gdatatype(6) As String Private gfilter(6) As String Private Function OpenDatabase() ถ้า Len(strConnect) = 0 จากนั้น "ตั้งค่าเริ่มต้น ถ้า Len(strDatabase) = 0 ดังนั้น strDatabase = "pubs" สิ้นสุด ถ้า ถ้า nConnectionTimeOut = 0 ดังนั้น nConnectionTimeOut = 600 สิ้นสุด ถ้า ถ้า nCommandTimeOut = 0 ดังนั้น nCommandTimeOut = 600 สิ้นสุด ถ้า ถ้า Len (strAppName) = 0 จากนั้น strAppName = "xmlControl" สิ้นสุด ถ้า Len(strUser) = 0 ดังนั้น strUser = "sa" สิ้นสุด ถ้า Len(strPassword) = 0 ดังนั้น strPassword = "" สิ้นสุด ถ้า strConnect = "Provider=SQLOLEDB 1 ; " & _ "ชื่อแอปพลิเคชัน =" & strAppName & _ "; แหล่งข้อมูล = " & strServer & "; แค็ตตาล็อกเริ่มต้น="&strDatabase&"; " & _ " รหัสผู้ใช้=" & strUser & "; Password=" & strPassword & ";" End If "เชื่อมต่อกับ SQL Server และเปิดฐานข้อมูล On Error GoTo SQLERr "เปิดใช้งานตัวจัดการข้อผิดพลาดด้วย m_dbConnection .ConnectionTimeout = nConnectionTimeOut .CommandTimeout = nCommandTimeOut .Open strConnect "เปิดฐานข้อมูลโดยใช้สตริงการเชื่อมต่อ สิ้นสุดด้วยข้อผิดพลาด On GoTo 0 "ปิดตัวจัดการข้อผิดพลาด OpenDatabase = True "ฐานข้อมูลเปิดสำเร็จแล้ว ออกจากฟังก์ชัน SQLERr: Call logerror ("OPEN") OpenDatabase = False End Function ฟังก์ชันส่วนตัว BuildSQLwhere (tmpWhere) As String "นี่คือจุดสิ้นสุดในอนาคต ฟังก์ชั่น ฟังก์ชั่นสาธารณะ GetTitlesXML (ทางเลือก xmlWhere As Variant) As String Dim โดยที่Clause As String Dim strSQL As String Call OpenDatabase "เปิดฐานข้อมูลผับ ถ้า IsMissing(xmlWhere) จากนั้น "เมื่อแบบสอบถามล้มเหลว WhereClause = "" อื่น ๆ โดยที่ WhereClause = BuildSQLwhere(xmlWhere)" แปลงแบบสอบถามเป็น sql ที่ถูกต้อง End หาก "เริ่มต้นนิพจน์ sql ที่จะค้นหาชื่อหนังสือ strSQL = "เลือก title_id,title,type,price,ytd_sales,notes,pubdate จากชื่อ" &whereClause Call NewRecordSet "สร้างชุดข้อมูล" ตั้งค่าตำแหน่งเคอร์เซอร์ m_adoRs CursorLocation = adUseClient "เปิดชุดระเบียน m_adoRs.Open strSQL, m_dbConnection, adOpenForwardOnly, adLockReadOnly, adCmdText "ตัดการเชื่อมต่อจากชุดข้อมูล ชุด m_adoRs.ActiveConnection = ไม่มีข้อผิดพลาด GoTo 0 "ปิดตัวจัดการข้อผิดพลาด" ปิดฐานข้อมูลและปล่อยการเชื่อมต่อ โทร CloseDatabase ถ้า m_adoRs.EOF แล้ว GetTitlesXML = "" "คำขอไม่ได้ส่งคืนค่าใด ๆ มิฉะนั้น ถ้า lMSADO แล้ว GetTitlesXML = msado(m_adoRs) "แปลงชุดระเบียน ado เป็น xml แบบกำหนดเอง End If End If "ปิดชุดข้อมูล โทร CloseRecordset ออก ฟังก์ชั่น SQLErr: Call logerror(strSQL) ฟังก์ชั่นสิ้นสุด ฟังก์ชั่นส่วนตัว ADOtoXML(tmprs As ADODB.Recordset, tmpMP As Boolean) As String Dim adoFields As ADODB.Fields "ประกาศคอลเลกชันสำหรับจัดเก็บฟิลด์ Dim adoField As ADODB.Field "ถูกใช้เพื่อรับ แต่ละฟิลด์จากคอลเลกชัน Dim xmlDoc As msxml2.DOMDocument30 Dim tmpLine As String "จัดเก็บการแสดง xml ของหนังสือแต่ละเล่ม Dim tmpXML As String" ใช้เพื่อเชื่อมสตริง xml Dim i As Integer ถ้า tmprs.EOF จากนั้น "แบบสอบถามไม่ได้ส่งคืนบันทึกใด ๆ ADOtoXML = "" ออกจากฟังก์ชันอื่น ตั้งค่า adoFields = tmprs.Fields "สร้างคอลเลกชันของฟิลด์ สิ้นสุดถ้า tmpXML = " " "หนังสือทั้งหมดจะอยู่ในแท็ก Do Until tmprs.EOF "วนซ้ำแต่ละแถวในชุดข้อมูล i = 0 " I คือดัชนีของฟิลด์ ado ซึ่งเริ่มต้นที่ 0 - ฟิลด์แรกจะเป็น field(0) tmpLine = " " & tmprs("title") & vbCrLf สำหรับแต่ละ adoField ใน adoFields "วนซ้ำทุกฟิลด์" สร้างแท็ก xml และคุณลักษณะสำหรับฟิลด์ปัจจุบัน tmpLine = tmpLine & " " & adoField.Value tmpLine = tmpLine & "" & vbCrLf i = i + 1 "ย้ายไปที่ฟิลด์ถัดไป ถัดไป tmpXML = tmpXML & tmpLine & "" & vbCrLf "แท็กปิดหลังฟิลด์สุดท้าย tmprs.MoveNext "ส่วนหัวถัดไป วนซ้ำ ชุด adoField = ไม่มีสิ่งใด "ทำลายวัตถุฟิลด์ ตั้ง adoFields = ไม่มีสิ่งใด "ทำลายวัตถุคอลเลกชันฟิลด์ tmpXML= tmpXML & "แท็กปิด "&vbCrLf" ตั้งค่า xmlDoc = ใหม่ msxml2.DOMDocument30 "สร้าง xmlDOM xmlDoc.async = False "รอให้เอกสารโหลด xmlDoc.validateOnParse = False "อย่าตรวจสอบสคีมา xmlDoc.loadXML(tmpXML) "โหลดสตริงลงในโมเดลวัตถุเอกสาร เมื่อเกิดข้อผิดพลาด ดำเนินการต่อถัดไป "หากไม่มีไฟล์อยู่ เราจะดำเนินการกับข้อผิดพลาดนี้ Kill("c:\temp\custom.xml") "ลบไฟล์หากมีอยู่ On Error GoTo 0" แจ้งตัวจัดการข้อผิดพลาดให้ขัดจังหวะเมื่อมีข้อผิดพลาดเกิดขึ้น ตรวจพบ xmlDoc.save ("c:\temp\custom.xml") "บันทึก xml ไปยังไฟล์ ADOtoXML=xmlDoc.xml "ส่งคืนสตริง xml ชุด xmlDoc=ไม่มีอะไร "ทำลายเอกสาร วัตถุ โมเดล ฟังก์ชั่นสิ้นสุด ฟังก์ชั่นส่วนตัว msado(tmprs As ADODB.Recordset ) As String Dim xmlDoc As msxml2.DOMDocument30 On Error Resume Next "หากไม่มีไฟล์อยู่ เราได้รับข้อผิดพลาด Kill ("c:\temp\msado.xml") "เราจะลบไฟล์หากมีอยู่ บนข้อผิดพลาด GoTo 0 "เราบอกให้ตัวจัดการข้อผิดพลาดยกเลิกเมื่อตรวจพบข้อผิดพลาด tmprs.save "c:\temp\msado .xml", adPersistXML "บันทึก xml ลงในไฟล์ ตั้ง xmlDoc = ใหม่ msxml2.DOMDocument30 "สร้างโมเดลวัตถุเอกสาร xml xmlDoc .async = False "รอให้เอกสาร xml โหลด xmlDoc.validateOnParse = False "อย่าตรวจสอบ xmlDoc.Load schema ("C: \temp\msado.xml") "โหลดไฟล์ลงในเอกสาร object model msado = xmlDoc .xml "ส่งคืนสตริง xml ชุด xmlDoc = Nothing "ทำลายโมเดลวัตถุเอกสาร End Function Private SubCloseRecordset() " ปิดชุดข้อมูล m_adoRs.Close Set m_adoRs =Nothing End Sub Private Sub NewRecordSet() Set m_adoRs= Nothing Set m_adoRs=New ADODB.Recordset End Sub Private Sub CloseDatabase() m_dbConnection.Close Set m_dbConnection = Nothing End Sub Private Sub logerror (errSQL As String) Dim hFile As Integer Dim expFile As String On Error GoTo 0 gnErrNum = Err.Number gstrErrDesc = Err.Description gstrErrSrc = Err.Source Set m_adoErrors = m_dbConnection.Errors สำหรับแต่ละ m_adoErr ใน m_adoErrors gstrADOError = m_adoErr.Description & "," & CStr(m_adoErr.NativeError) _ & ", " & CStr(m_adoErr.Number) & "," & m_adoErr. Source _ & "," & CStr(m_adoErr.SQLState) Next hFile =FreeFile If Len(strLogPath) = 0 จากนั้น strLogPath = "C:\temp\" End If expFile = strLogPath & strAppName & ".err" เปิด expFile เพื่อผนวก ในฐานะ #hFile พิมพ์ #hFile"*************************************** ***** **" พิมพ์ #hFile ตอนนี้() พิมพ์#hFile, "************************************ *** ****" พิมพ์ #hFile,"รูทีนย่อย: " & tmpPro พิมพ์ #hFile, "หมายเลขข้อผิดพลาด:" & gnErrNum Print#hFile, "คำอธิบายข้อผิดพลาด: " & gstrErrDesc พิมพ์ #hFile, "แหล่งที่มาของข้อผิดพลาด:" & gstrErrSrc Print # hFile, "Ado error String: " & gstrADOError Print #hFile, "Bad SQL: " & errSQL Close #hFile End Sub Private Sub Class_Initialize() strVersion = "xmlControl เวอร์ชัน 1. 1" "title_id,ชื่อ,ประเภท,ราคา,ytd_sales,หมายเหตุ,เผยแพร่ gtableName(0) = "ชื่อ" gcolumnName(0) = "title_id" gprettyName(0) = "หมายเลขประจำตัวชื่อเรื่อง" gdatatype(0) = "number" gfilter(0) = "" gtableName(1) = "titles" gcolumnName(1) = "title" gprettyName(1) = "ชื่อหนังสือ" gdatatype(1) = "text" gfilter(1) = "" gtableName (2) = "ชื่อ" gcolumnName(2) = "ประเภท" gprettyName(2) = "ประเภทหนังสือ" gdatatype(2) = "ข้อความ" gfilter(2) = "" gtableName(3) = "ชื่อ" gcolumnName( 3) = "ราคา" gprettyName(3) = "ราคาหนังสือ" gdatatype(3) = "number" gfilter(3) = "" gtableName(4) = "titles" gcolumnName(4) = "ytd_sales" gprettyName( 4) = "ยอดขายตั้งแต่ต้นปีจนถึงปัจจุบัน" gdatatype(4) = "number" gfilter(4) = "" gtableName(5) = "titles" gcolumnName(5) = "notes" gprettyName(5) = "หมายเหตุเกี่ยวกับหนังสือ " gdatatype(5) = "memo" gfilter(5) = "" gtableName(6) = "titles" gcolumnName(6) = "pubdate" gprettyName(6) = "วันที่เผยแพร่" gdatatype(6) = "date" gfilter (6) = "" จบรายการย่อย

    รายการ 4 - แอปพลิเคชันทดสอบ VB เพื่อทดสอบ WebClass

    Private Sub Command1_Click() Dim objWC As xmlControl Dim xml As String Set objWC = New xmlControl objWC.strDatabase = "pubs" objWC.strServer = "ltweb" objWC.strUser = "sa" objWC.strPassword = "" objWC.lMSADO = Option2 .Value objWC.strAppName = "Article1" Text1.Text = objWC.getTitlesXML สิ้นสุดย่อย

    รายการ 5 - ASP สำหรับการทดสอบ WebClass

    บางครั้งการทำความเข้าใจไฟล์ XML ที่ส่งไปยังห้องเกี่ยวกับที่ดินนั้นเป็นสิ่งจำเป็นเมื่อคุณรู้สึกว่าจำเป็นต้องแก้ไขบางสิ่งที่ไหนสักแห่งและหลายคนมีความอยากรู้อยากเห็นตามธรรมชาติที่พัฒนาขึ้น แต่...สำคัญ โปรดจำไว้ว่าหลังจากลงนามในไฟล์ลายเซ็นดิจิทัล คุณจะไม่สามารถแก้ไขไฟล์ XML ได้! ตามตัวอย่างจากการปฏิบัติ เมื่อแบ่งพล็อตออกเป็น 300 หน่วยหน่วยความจำ เด็กผู้หญิงคนหนึ่งเผลอลบบรรทัดเดียวในที่อยู่ของหนึ่งในแปลงนั้น เพียงเท่านี้... ไฟล์ XML ไม่ผ่านการตรวจสอบ การค้นหารายการทั้งหมดในโปรแกรมดูเหมือนจะน่าเบื่อสำหรับฉัน โดยเฉพาะอย่างยิ่งเมื่อฉันรู้ว่าจะต้องค้นหาอะไร เมื่อเปิดไฟล์ XLM ในโปรแกรมแก้ไขทดสอบโดยการค้นหา ฉันพบบรรทัดที่ต้องการและทำการเปลี่ยนแปลง แต่ฉันขอย้ำอีกครั้งว่า หากคุณแก้ไขไฟล์ คุณจะต้องเซ็นชื่อใหม่ด้วยลายเซ็นดิจิทัลของคุณ มาเริ่มกันเลย ฉันจะนำเสนอภาพวาดและเขียนคำอธิบายให้พวกเขา

    และถอยอีกครั้งหนึ่ง เพื่อการแก้ไขและดูไฟล์ XML ได้สะดวกฉันแนะนำให้ใช้โปรแกรม มันจะช่วยให้คุณเห็นโครงสร้างของไฟล์และปรับสีตามค่าได้อย่างสะดวก ตัวอย่างเช่นฉันจะใช้ราวแขวนผ้าอุ่นไฟฟ้าสำหรับห้องน้ำแน่นอนว่าไม่ใช่ของเขา -) แต่เป็นไฟล์ XML สำหรับการสร้างหน่วยความจำ 2 หน่วยโดยการจัดสรรส่วนแบ่งในสิทธิ์การเป็นเจ้าของร่วมกันให้กับหน่วยความจำ อุปกรณ์ที่มีหมายเลขที่ดิน….
    ตามตัวอย่าง ก่อนอื่น ฉันจะแสดงรูปภาพของไฟล์ XML ที่ยุบพร้อมบล็อกที่ยุบหนึ่งบล็อก

    ดังนั้นเมื่อพิจารณาจากตัวนับบรรทัดที่อยู่ด้านซ้าย เรามีไฟล์จำนวน 336 บรรทัด ดังจะเห็นได้จากรูปบล็อค ยุบแล้ว ไอคอนบวกทางด้านขวา ดังนั้น ขั้นแรกฉันจะอธิบายสิ่งที่มองเห็นได้จากรูปนี้ทีละบรรทัด จากนั้นเราจะวิเคราะห์บล็อกที่รวมอยู่ในบล็อก เพราะมันมีขนาดใหญ่ที่สุด

    เราจะไม่พิจารณาไฟล์ทั้งหมดทีละบรรทัด แต่จะพิจารณาเฉพาะบรรทัดที่ป้อนข้อมูลของเราเท่านั้น

    3 บรรทัด : CodeType=”014″ – ประเภทของงาน มีเพียงสองอย่างในกรณีของเรา – การศึกษาและ “015” – ชี้แจง Version=”03″ – เวอร์ชันไฟล์ XML GUID (Globally Unique Identifier) ​​​​เป็นตัวระบุ 128 บิตที่ไม่ซ้ำกันทางสถิติ ในกรณีของเรา ชื่อไฟล์จะต้องตรงกับตัวบ่งชี้นี้
    4 บรรทัด : ข้อมูลจากองค์กรที่วิศวกรด้านที่ดินทำงาน หรือข้อมูลจากวิศวกรด้านที่ดินเอง
    5 บรรทัด : รหัสขององค์กรผู้รับ ในกรณีนี้คือสำนักงานบริการกลางเพื่อการจดทะเบียนของรัฐ ที่ดิน และการทำแผนที่สำหรับสาธารณรัฐตาตาร์สถาน

    ตอนนี้เรามาดูที่ส่วนท้ายของไฟล์ทันทีตามรูปที่นำเสนอแล้วดูที่บล็อก - ในบล็อกนี้ ข้อมูลเกี่ยวกับวิศวกรที่ดินที่ปฏิบัติงานจะถูกป้อน ถัดมาเป็นบล็อกที่ระบบพิกัดพอดี อนึ่ง "ในค่าข้อความของไฟล์จะแสดงด้วยเครื่องหมายคำพูด

    โดยหลักการแล้ว การเปิดไฟล์ใน Notepad++ โครงสร้างทั้งหมดของไฟล์ XML จะมีความชัดเจน – ที่ตั้ง – มีที่อยู่ มูลค่าเข้า เขียนเมื่อส่วนหนึ่งของที่อยู่หายไปจาก KLADR

    ตัวอย่างของไฟล์ XML แผนที่แผนที่สร้างขึ้นในผลิตภัณฑ์ซอฟต์แวร์แผนแผนที่รูปหลายเหลี่ยม

    หากต้องการดูส่วนนี้ให้ชัดเจนยิ่งขึ้น ให้คัดลอกและดูในตัวแก้ไขทดสอบ Notepad++ ซึ่งคุณสามารถดาวน์โหลดได้จากส่วนนี้

    โดยการเข้าใจผิดในหนทางสู่จุดจบ ผู้คนจะผิดหวังในตนเองและผู้อื่น ผลก็คือไม่มีอะไรเกิดขึ้นจากกิจกรรมทั้งหมดของพวกเขา หรือสิ่งที่ตรงกันข้ามกับสิ่งที่พวกเขาพยายามดิ้นรนเพื่อให้ได้มาผม. เกอเธ่