วิธีการประมวลผล xml ใน c. วิธีเปิดเอกสาร XML - คุณสมบัติการทำงานกับไฟล์ XML การสร้างองค์ประกอบ XML ด้วยองค์ประกอบลูก




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

XML คืออะไร

XMLเป็นภาษามาร์กอัปที่สร้างโดย World Wide Web Consortium (W3C) เพื่อกำหนดไวยากรณ์การเข้ารหัสสำหรับเอกสารที่มนุษย์และเครื่องจักรสามารถอ่านได้ โดยทำสิ่งนี้โดยใช้แท็ก ซึ่งกำหนดโครงสร้างของเอกสารตลอดจนวิธีการจัดเก็บและขนส่งเอกสาร

วิธีที่ง่ายที่สุดในการเปรียบเทียบคือกับภาษามาร์กอัปอื่นที่คุณอาจคุ้นเคย มาร์กอัปไฮเปอร์เท็กซ์(HTML) ใช้ในการเข้ารหัสหน้าเว็บ HTML ใช้ชุดอักขระมาร์กอัปที่กำหนดไว้ล่วงหน้า (รหัสสั้น) ที่อธิบายรูปแบบของเนื้อหาบนหน้าเว็บ

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

โดยพื้นฐานแล้ว HTML เป็นภาษาที่เน้นการนำเสนอเนื้อหาในขณะที่ XML เป็นภาษาคำอธิบายข้อมูลเฉพาะที่ใช้ในการจัดเก็บข้อมูล

XML มักใช้เป็นพื้นฐานสำหรับรูปแบบเอกสารอื่นๆ ซึ่งมีอยู่หลายร้อยรูปแบบ นี่คือบางส่วนที่คุณอาจต้องการทราบ:

  • RSS และ ATOM อธิบายว่าแอปพลิเคชันควรจัดการฟีดอย่างไร
  • Microsoft .NET ใช้ XML สำหรับไฟล์การกำหนดค่า
  • Microsoft Office ใช้ XML เป็นพื้นฐานสำหรับโครงสร้างเอกสาร

ดังนั้น หากคุณมีไฟล์ XML ก็ไม่จำเป็นต้องบอกคุณว่าไฟล์นี้มีไว้สำหรับแอปพลิเคชันใด อย่างไรก็ตาม คุณไม่จำเป็นต้องกังวลเกี่ยวกับเรื่องนี้ เว้นแต่ว่าคุณกำลังพัฒนาไฟล์ XML

วิธีการเปิดไฟล์ XML

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

ใช้โปรแกรมแก้ไขข้อความเมื่อทำงานกับ XML เป็นประจำ

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


การใช้เว็บเบราว์เซอร์เพื่อดูไฟล์ XML

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

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

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

การใช้โปรแกรมแก้ไขออนไลน์สำหรับไฟล์ XML

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

TutorialsPoint.com , XMLGrid.net และ CodeBeautify.org - อนุญาตให้คุณดูและแก้ไขไฟล์ XML เมื่อการแก้ไขเสร็จสิ้น คุณสามารถอัปโหลดไฟล์ XML ที่แก้ไขแล้วหรือแปลงเป็นรูปแบบอื่นได้

ลองใช้ CodeBeautify.org เป็นตัวอย่าง หน้านี้แบ่งออกเป็นสามส่วน ทางด้านซ้ายคือไฟล์ XML ที่คุณใช้งานอยู่ ตรงกลางคุณจะพบกับฟังก์ชั่นต่างๆ ทางด้านขวา คุณจะเห็นผลลัพธ์ของตัวเลือกบางส่วนที่คุณสามารถเลือกได้

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

ใช้ปุ่มเรียกดูเพื่อโหลดไฟล์ XML จากคอมพิวเตอร์ของคุณหรือปุ่มโหลด URL เพื่อดึงข้อมูล XML จากแหล่งอินเทอร์เน็ต

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

Beatify แสดงข้อมูลของคุณในลักษณะที่เรียบร้อยและอ่านง่าย

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

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

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

ในบทความนี้

มาร์กอัป มาร์กอัป และแท็ก

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

ในโลกของเทคโนโลยีสารสนเทศ คำว่า "แท็ก" ได้กลายเป็นคำว่า "มาร์กอัป" มาร์กอัปใช้รหัสที่เรียกว่าแท็ก (หรือบางครั้งโทเค็น) เพื่อกำหนดโครงสร้าง ลักษณะที่ปรากฏ และ - ในกรณีของ XML - ความหมายของข้อมูล

ข้อความ HTML ของบทความนี้เป็นตัวอย่างที่ดีของการใช้มาร์กอัปคอมพิวเตอร์ หากคุณคลิกขวาที่หน้านี้ใน Microsoft Internet Explorer และเลือก ดูโค้ด HTMLคุณจะเห็นข้อความที่อ่านได้และแท็ก HTML เช่น

และ

. ในเอกสาร HTML และ XML แท็กจะจดจำได้ง่ายเนื่องจากอยู่ในวงเล็บมุม ในซอร์สโค้ดของบทความนี้ แท็ก HTML ทำหน้าที่หลายอย่าง เช่น การกำหนดจุดเริ่มต้นและจุดสิ้นสุดของแต่ละย่อหน้า (

...

) และตำแหน่งของภาพวาด

คุณสมบัติที่โดดเด่นของ XML

เอกสารในรูปแบบ HTML และ XML มีข้อมูลอยู่ในแท็ก แต่นั่นคือจุดสิ้นสุดของความคล้ายคลึงกันระหว่างสองภาษา ในรูปแบบ HTML แท็กจะกำหนดการนำเสนอข้อมูล - ตำแหน่งของส่วนหัว ส่วนต้นของย่อหน้า ฯลฯ ในรูปแบบ XML แท็กจะกำหนดโครงสร้างและความหมายของข้อมูล - คืออะไร

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

โปรดคำนึงถึงสิ่งต่อไปนี้เมื่อทำงาน:

    HTML ไม่สามารถใช้แทน XML ได้ อย่างไรก็ตาม ข้อมูล XML สามารถรวมไว้ในแท็ก HTML และแสดงบนหน้าเว็บได้

    คุณลักษณะ HTML ถูกจำกัดไว้เพียงชุดแท็กที่กำหนดไว้ล่วงหน้าซึ่งใช้ร่วมกันสำหรับผู้ใช้ทุกคน

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

    อิซซี่ สยาม 6 ใช่ เลขที่ อิซ138บอด คอลิน วิลค็อกซ์

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

แต่อย่าสับสนแท็กในตัวอย่างนี้กับแท็กในไฟล์ HTML ตัวอย่างเช่น หากวางข้อความ XML ด้านบนลงในไฟล์ HTML และเปิดในเบราว์เซอร์ ผลลัพธ์จะมีลักษณะดังนี้:

อิซซี่ สยามมีส 6 ใช่ ไม่ใช่ อิซซี่138บอด โคลิน วิลค็อกซ์

เว็บเบราว์เซอร์จะไม่สนใจแท็ก XML และแสดงเฉพาะข้อมูล

ข้อมูลที่มีรูปแบบที่ดี

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

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

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

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

โครงการ

อย่าหวั่นไหวกับคำว่า "โครงการ" สคีมาเป็นเพียงไฟล์ XML ที่มีกฎสำหรับเนื้อหาของไฟล์ข้อมูล XML ไฟล์สคีมามักจะมีนามสกุล .xsd ในขณะที่ไฟล์ข้อมูล XML จะใช้นามสกุล .xml

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

สคีมาอาจซับซ้อน และเป็นไปไม่ได้ที่จะอธิบายวิธีสร้างสคีมาในบทความนี้ (อาจเป็นไปได้ว่าองค์กรของคุณมีเจ้าหน้าที่ไอทีที่รู้วิธีการทำเช่นนี้) อย่างไรก็ตาม การทราบว่าไดอะแกรมมีลักษณะอย่างไรจะเป็นประโยชน์ สคีมาต่อไปนี้จะกำหนดกฎสำหรับชุดแท็ก ... :

ไม่ต้องกังวลหากตัวอย่างไม่สมเหตุสมผล เพียงใส่ใจกับสิ่งต่อไปนี้:

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

    การประกาศเป็นวิธีที่มีประสิทธิภาพในการควบคุมโครงสร้างของข้อมูล ตัวอย่างเช่น โฆษณา หมายถึงแท็กเช่น และ จะต้องอยู่ในลำดับข้างต้น การประกาศยังสามารถตรวจสอบประเภทของการป้อนข้อมูลของผู้ใช้ได้ ตัวอย่างเช่น สคีมาด้านบนกำหนดให้เป็นจำนวนเต็มบวกสำหรับอายุของ cat และบูลีน (TRUE หรือ FALSE) สำหรับแท็ก ALTERED และ DECLAWED

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

การเปลี่ยนแปลง

ตามที่กล่าวไว้ข้างต้น XML ยังอนุญาตให้ใช้และนำข้อมูลกลับมาใช้ใหม่ได้อย่างมีประสิทธิภาพ กลไกการนำข้อมูลกลับมาใช้ใหม่เรียกว่าการแปลง XSLT (หรือการแปลงเพียงอย่างเดียว)

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

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

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

ชื่อ พันธุ์ อายุ เปลี่ยนแปลง กรงเล็บ ใบอนุญาต เจ้าของ

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

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

XML ในระบบ Microsoft Office

Office รุ่นมืออาชีพให้การสนับสนุน XML ที่ได้รับการปรับปรุง เริ่มต้นด้วย Microsoft Office System 2007 Microsoft Office จะใช้รูปแบบไฟล์ที่ใช้ XML เช่น DOCX, XLSX และ PPTX เนื่องจาก XML จัดเก็บข้อมูลในรูปแบบข้อความแทนที่จะเป็นรูปแบบไบนารีของตัวเอง ลูกค้าจึงสามารถกำหนดสคีมาของตนเองและใช้ข้อมูลของคุณได้หลายวิธีโดยไม่ต้องจ่ายค่าลิขสิทธิ์ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบใหม่ โปรดดูรูปแบบ Open XML และนามสกุลไฟล์ ด้านล่างนี้คือสิทธิประโยชน์อื่นๆ

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

เปิดใช้งานเครื่องมือ XML ใน Office

ตามค่าเริ่มต้น แท็บนักพัฒนาจะไม่แสดง จะต้องเพิ่มลงใน Ribbon เพื่อที่จะใช้คำสั่ง XML ใน Office

ในบทความก่อนหน้านี้ มีการอธิบายแนวคิดทั่วไปที่เกี่ยวข้องกับ XML ในบทความนี้ เราจะได้เรียนรู้วิธีดำเนินการพื้นฐานที่เกี่ยวข้องกับการเปลี่ยนแปลง การเพิ่ม และการค้นหาในไฟล์ XML

ไฟล์ XML ที่ใช้เป็นตัวอย่าง

มาสด้า 2007 บีเอ็มดับเบิลยู 2009

xml โดม

ในขณะนี้ ไฟล์ของเรามีโครงสร้างดังต่อไปนี้:

ความสัมพันธ์ระหว่างโหนดใน XML DOM, ช่วงเวลาพื้นฐาน:

1. โหนดใดๆ ในแผนผัง DOM มี ParentNode หลัก ในตัวอย่างของเรา โรงรถเป็นองค์ประกอบแม่ขององค์ประกอบรถทั้งสอง และองค์ประกอบรถยนต์ทั้งสองเป็นองค์ประกอบแม่ของรุ่นและปี

จะรับพาเรนต์ขององค์ประกอบ car xml ได้อย่างไร

Console.WriteLine (elmRoot ["รถยนต์"] .ParentNode.Name); //ผลลัพธ์: โรงรถ

2. ผู้ปกครองสามารถมีลูก ChildNodes ได้ ตัวอย่างเช่น สำหรับโหนดการจอดรถ องค์ประกอบของรถทั้งสององค์ประกอบเป็นลูก องค์ประกอบของรถก็มีรุ่นและลูกปีด้วย

ลูกโหนดเป็นคอลเลกชันที่เก็บองค์ประกอบ xml เด็กทั้งหมด คุณต้องระบุดัชนีเพื่อเข้าถึงองค์ประกอบที่ต้องการ (ดัชนีเริ่มต้นจากศูนย์เสมอ!)

ตัวอย่างเช่น วิธีรับองค์ประกอบลูกแรก

ElmRoot.ChildNodes;

3. เช่นเดียวกับชีวิตปกติ เด็กสามารถเกิดเป็นบุตรคนแรกหรือบุตรคนสุดท้ายได้

หากเรายกธาตุรถยนต์มาเป็นตัวอย่างแล้ว

FirstChild คือรุ่น LastChild คือปี

4. ในทางกลับกัน องค์ประกอบเด็กยังมีความเชื่อมโยงกัน พวกเขาอาจเป็นพี่น้องกันก็ได้ ถ้าเราวาดแนวกับชีวิตจริง

ตัวอย่างเช่น เด็กสามารถมีพี่ชายคนก่อนหน้าพี่น้องและน้องชายคนถัดไป Next Sibling

Console.WriteLine (elmRoot.ChildNodes.FirstChild.NextSibling.Name); // ผลลัพธ์: ปี Console.WriteLine (elmRoot.ChildNodes. LastChild.PreviousSibling.Name); //ผลลัพธ์: โมเดล

หากไม่พบองค์ประกอบ จะมีข้อยกเว้นเกิดขึ้น: NullReferenceException ดังนั้นเมื่อทำงานกับ xml ให้ใช้ try catch block เสมอ

Console.WriteLine (elmRoot.ChildNodes.LastChild.NextSibling.Name); Console.WriteLine (elmRoot.ChildNodes.FirstChild.PreviousSibling.Name);

LastChild คือ NextSibling;
FirstChild คือ PreviousSibling;

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

จะรับค่าขององค์ประกอบ xml ได้อย่างไร?

ค่าขององค์ประกอบ xml สามารถรับได้โดยใช้คุณสมบัติ InnerText เช่น:

Console.WriteLine (elmRoot ["รถยนต์"] .FirstChild.InnerText); //ผลลัพธ์: มาสด้า

อีกวิธีในการรับค่าเดียวกันขององค์ประกอบ xml:

Console.WriteLine (elmRoot.FirstChild.FirstChild.InnerText); //ผลลัพธ์: มาสด้า

ลำดับการเคลื่อนที่ผ่านแผนผัง DOM:

อู่ -> รถ -> รุ่น -> Mazda

รับปี:

ElmRoot["รถ"].LastChild.InnerText; //ผลลัพธ์: 2550

ผลที่ตามมา:

อู่ซ่อมรถ -> รถ -> ปี -> 2550

อีกตัวอย่างหนึ่ง: 3 วิธีในการรับผลลัพธ์เดียวกัน

Console.WriteLine (elmRoot.LastChild.FirstChild.InnerText); Console.WriteLine (elmRoot ["รถยนต์"].NextSibling.FirstChild.InnerText); Console.WriteLine (elmRoot.ChildNodes.Item (1). FirstChild.InnerText); //ผลลัพธ์: บีเอ็มดับเบิลยู

หากคุณต้องการรับปีสำหรับองค์ประกอบที่มีค่าเป็น Mazda:

Console.WriteLine (elmRoot.FirstChild.LastChild.InnerText); //ผลลัพธ์: 2550

สำหรับ BMW (สองทางได้ผลเหมือนกัน)

Console.WriteLine (elmRoot.ChildNodes.Item (1). ChildNodes.Item (1). ข้อความภายใน); Console.WriteLine (elmRoot.ChildNodes.ChildNodes.InnerText); //ผลลัพธ์: 2552

จะเปลี่ยนค่าขององค์ประกอบ xml ได้อย่างไร?

การใช้ทรัพย์สิน ข้อความภายใน()คุณสามารถรับและเปลี่ยนค่าขององค์ประกอบ xml ได้ เช่น เปลี่ยนปี

//ตั้งค่าใหม่ elmRoot.FirstChild.LastChild.InnerText = "2010"; //ส่งออกค่าใหม่ไปยังหน้าจอคอนโซล Console.WriteLine(elmRoot.FirstChild.ChildNodes.Item(1).InnerText); //ผลลัพธ์: 2010

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

เพื่อให้การเปลี่ยนแปลงมีผล คุณต้องใช้วิธีการบันทึก เช่น:

ElmRoot.Save("ชื่อไฟล์ xml หรือสตรีม");

ตอนนี้ข้อมูลจะเปลี่ยนไปในไฟล์ xml "ฟิสิคัล"

จะรับจำนวนองค์ประกอบลูกได้อย่างไร?

Console.WriteLine (elmRoot.FirstChild.ChildNodes.Count);

โรงรถ -> รถมีลูก 2 คน: รุ่นและปี

Console.WriteLine (elmRoot.FirstChild.FirstChild.ChildNodes.Count);

โรงรถ -> รถยนต์ -> โมเดลมีองค์ประกอบลูก xml 1 รายการ

การเข้าถึงองค์ประกอบลูก

โดยดัชนี

ElmRoot.ChildNodes.ชื่อ; เอล์มRoot.ChildNodes.Name; //ผลลัพธ์: รถยนต์

มีห่วง

Foreach (พยักหน้า XmlNode ใน elmRoot.ChildNodes) ( Console.WriteLine(nod.Name); ) // ผลลัพธ์: รถยนต์ รถยนต์

จะรับชื่อขององค์ประกอบ xml ได้อย่างไร?

เอล์มRoot.Name; //ผลลัพธ์: โรงรถ

การสร้างองค์ประกอบ XML ใหม่

มาสร้างองค์ประกอบใหม่ในเอกสาร XML ของเราเพื่อแยกความแตกต่างจากอีกสององค์ประกอบ (รถยนต์) หรือเรียกว่าบัส

เมื่อสร้างองค์ประกอบใหม่ เราจะใช้คำแนะนำจากไซต์ msdn และใช้เมธอด CreateElement แทน XmlElement ใหม่มาตรฐาน

XmlElement เอล์ม = xmlDoc.CreateElement("บัส");

การสร้างและเพิ่มองค์ประกอบ xml ใหม่

มาสร้างองค์ประกอบ xml ใหม่ชื่อ "BUS"

XmlElement elmRoot = xmlDoc.DocumentElement; Console.WriteLine (elmRoot.ChildNodes.Count); //รถยนต์, รถยนต์ XmlElement elmNew = xmlDoc.CreateElement("bus"); elmRoot.AppendChild (เอล์มใหม่); Console.WriteLine (elmRoot.ChildNodes.Count); //3 รถยนต์ รถยนต์ รถบัส xmlDoc.Save("ชื่อไฟล์ xml");

คำอธิบาย:

1. ขั้นแรกเราได้รับองค์ประกอบรูทที่เราจะแนบองค์ประกอบใหม่

2. จากการทดสอบ ให้พิมพ์จำนวนลูกปัจจุบันขององค์ประกอบโรงรถ: 2 (รถยนต์และรถยนต์)

3. สร้างองค์ประกอบ BUS ใหม่

4. การใช้วิธี ผนวกChildเพิ่มองค์ประกอบใหม่ให้กับต้นไม้

5. ลองใช้การตรวจสอบอีกครั้งและแสดงจำนวนองค์ประกอบปัจจุบันสำหรับองค์ประกอบโรงรถซึ่งขณะนี้มี 3 รายการ ได้แก่ รถยนต์ รถยนต์ รถบัส

6. เพื่อให้การเปลี่ยนแปลงส่งผลต่อฟิสิคัลไฟล์ เราจะบันทึก

ในไฟล์ XML องค์ประกอบใหม่จะมีลักษณะดังนี้:

จะเพิ่มองค์ประกอบ xml ใหม่ได้อย่างไร?

งาน: สร้างองค์ประกอบ XML ใหม่และเพิ่มเนื้อหาข้อความ เช่น ปีที่ผลิต

สตริง strFilename = @"C:\lessons\Auto.xml"; XmlDocument xmlDoc = XmlDocument ใหม่(); xmlDoc.Load(strFilename); XmlElement elmRoot = xmlDoc.DocumentElement; XmlElement elmNew = xmlDoc.CreateElement("บัส"); XmlText new_txt = xmlDoc.CreateTextNode("2006"); elmRoot.AppendChild (เอล์มใหม่); เอล์มRoot.LastChild.AppendChild(new_txt); Console.WriteLine (elmRoot.ChildNodes.Name); //bus Console.WriteLine (elmRoot.ChildNodes.LastChild.InnerText); //2006 Console.Read();

ในไฟล์ XML:

2006

เพื่อความชัดเจน

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

การสร้างองค์ประกอบ XML ด้วยองค์ประกอบลูก

string strFilename = @"C:\lessons\Auto.xml"; //สร้างเอกสาร xml ใหม่ในหน่วยความจำ XmlDocument xmlDoc = new XmlDocument(); //โหลดไฟล์ xml ลงในหน่วยความจำ xmlDoc.Load(strFilename); // รับองค์ประกอบรูท XmlElement elmRoot = xmlDoc.DocumentElement; //สร้าง 3 องค์ประกอบ: บัส, โมเดล, ปี XmlElement elmBUS = xmlDoc.CreateElement("bus"); XmlElement elmModel = xmlDoc.CreateElement("รุ่น"); XmlElement elmYear = xmlDoc.CreateElement("ปี"); //ตั้งค่าสำหรับองค์ประกอบ: model, year XmlText year_txt = xmlDoc.CreateTextNode("2006"); //XmlText mod_txt = xmlDoc.CreateTextNode("liaz"); เพิ่มอย่างอื่น // เพิ่มองค์ประกอบลูกสองรายการให้กับองค์ประกอบบัส: model และ year elmBUS.AppendChild(elmModel); elmBUS.AppendChild (เอล์มปี); //เพิ่มค่าให้กับโมเดลและโหนดปี elmModel.InnerText = "liaz"; เอล์มปีผนวกเด็ก(year_txt); //เพิ่มบัสองค์ประกอบ xml ใหม่ลงในแผนผัง elmRoot.AppendChild(elmBUS); //ตรวจสอบว่าทุกอย่างถูกเพิ่มอย่างถูกต้องหรือไม่ Console.WriteLine(elmRoot.ChildNodes.FirstChild.InnerText); Console.WriteLine (elmRoot.LastChild.LastChild.InnerText); //หากทุกอย่างเป็นไปตามลำดับ ให้ใช้วิธีบันทึก xmlDoc.Save("xml file name");

ผลลัพธ์:

ลิอาซ 2006

คุณจะย่อรหัสนี้ให้สั้นลงได้อย่างไร? ตัวอย่างเช่นดังต่อไปนี้:

สตริง PathXmlFile = @"C:\lessons\Auto.xml"; XmlDocument xmlDoc = XmlDocument ใหม่(); xmlDoc.Load(PathXmlFile); XmlElement elmRoot = xmlDoc.DocumentElement; XmlElement elmBUS = xmlDoc.CreateElement("บัส"); XmlElement elmModel = xmlDoc.CreateElement("รุ่น"); XmlElement elmYear = xmlDoc.CreateElement("ปี"); //เพิ่มค่าให้กับโมเดลและโหนดปี elmModel.InnerText = "liaz"; เอล์มปี.InnerText = "2006"; elmBUS.AppendChild (เอล์มโมเดล); elmBUS.AppendChild (เอล์มปี); elmRoot.AppendChild (เอล์มบัส); //หากทุกอย่างถูกต้อง ให้เรียกใช้เมธอด Save xmlDoc.Save("xml file name");

มาย่อโค้ดให้สั้นลงอีกหน่อย เราจะใช้คุณสมบัติ InnerXml:

XmlDocument xmlDoc = XmlDocument ใหม่(); xmlDoc.Load(PathXmlFile); XmlElement elmXML = xmlDoc.CreateElement("บัส"); สตริง txt=" ลิอาซ" + "2006"; //InnerXml! elmXML.InnerXml = txt; //xmlDoc.DocumentElement (จะเป็นโรงรถ) เป็นอีกวิธีหนึ่งในการเข้าถึงองค์ประกอบรูท เช่นเดียวกับ XmlElement elmRoot = xmlDoc.DocumentElement; xmlDoc.DocumentElement.AppendChild( elmXML);xmlDoc .บันทึก(PathXmlFile);

ผลลัพธ์

รับรายการองค์ประกอบด้วย GetElementByTagName

GetElementByTagNameส่งคืน XmlNodeListซึ่งมีองค์ประกอบลูกหลานทั้งหมดที่เป็นขององค์ประกอบที่ระบุ เช่น เราจำเป็นต้องได้รับรถทุกรุ่นที่เก็บไว้ในโรงรถ:

XmlDocument xmlDoc = XmlDocument ใหม่(); xmlDoc.Load(strFilename); XmlNodeList modelName = xmlDoc.GetElementsByTagName("รุ่น"); foreach (โหนด XmlNode ใน modelName) ( Console.WriteLine(node.InnerText); ) // ผลลัพธ์: mazda, bmw, liaz

อ้างอิงด้วยดัชนี:

สตริง PathXmlFile = @"C:\lessons\Auto.xml"; XmlDocument xmlDoc = XmlDocument ใหม่(); xmlDoc.Load(PathXmlFile); XmlNodeList modelName = xmlDoc.GetElementsByTagName("รุ่น"); Console.WriteLine (ชื่อโมเดล.InnerText); //ผลลัพธ์: ลิแอซ

ฉันจะเปลี่ยนเนื้อหาข้อความขององค์ประกอบ "บัส" ที่สร้างขึ้นใหม่โดยใช้วิธี GetElementByTagName ได้อย่างไร

สตริง PathXmlFile = @"C:\lessons\Auto.xml"; XmlDocument xmlDoc = XmlDocument ใหม่(); xmlDoc.Load(PathXmlFile); XmlNodeList modelName = xmlDoc.GetElementsByTagName("รุ่น"); Console.WriteLine (ชื่อโมเดล.InnerText); // รับค่า: liaz

หรือจะเปลี่ยนชื่อลิแอซเป็นอิคารัสก็ได้

Console.WriteLine(modelName.InnerText = "อิคารัส");

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


ทำไมเราต้องทำงานกับ XML?

หากคุณยังไม่มีความคิดที่ดีว่า XML คืออะไรฉันขอแนะนำให้อ่านบทความ "XML เป็นเรื่องจริงจังและเป็นเวลานาน" ใน "KV" หมายเลข 2007 เพื่อประหยัดพื้นที่สำหรับสิ่งที่สำคัญกว่า รูปแบบ XML จะไม่ถูกแยกวิเคราะห์ที่นี่

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

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

ในทางกลับกัน XML ไม่ค่อยประหยัดนัก เนื่องจากในฐานะหนึ่งในผู้เยี่ยมชมฟอรัม Computer News เมื่อระบุไว้อย่างถูกต้อง เอกสาร XML มักประกอบด้วยข้อมูล 10% และแท็ก 90% อย่างไรก็ตาม ส่วนใหญ่แล้วจะขึ้นอยู่กับแท็กที่คุณเลือก คุณสามารถเขียน เซนต์. เมลนิไคต์, 2, ให้ฉัน . แม้ว่าตามจริงแล้วสำหรับฉันแล้วดูเหมือนว่าด้วยฮาร์ดไดรฟ์ในปัจจุบันและช่องสัญญาณที่หนาจึงไม่มีประโยชน์ที่จะหดตัวเป็นพิเศษ

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

สำหรับการเขียนโปรแกรม เราจะใช้ภาษาหลักของแพลตฟอร์ม .NET - C# เพื่อให้ผู้อ่านได้ฝึกฝนโค้ดโปรแกรมข้างต้นให้ได้มากที่สุด ฉันจะใช้ C # เวอร์ชันแรกและ .NET Framework "a


การบันทึกข้อมูล

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

ในการเริ่มต้น ให้สร้างโปรเจ็กต์ใหม่ใน Visual Studio, #Develop หรือ C# Builder และเพิ่ม System.Xml ลงในรายการเนมสเปซที่นำเข้า

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

ชื่อไฟล์สตริง = "c:\\demo.xml"; XmlTextWriter xml = XmlTextWriter ใหม่ (ชื่อไฟล์, System.Text.Encoding.Unicode); xml.Formatting = การจัดรูปแบบเยื้อง; xml.WriteStartDocument(); xml.WriteStartElement("องค์ประกอบราก"); สำหรับ (int i = 0; i< 10; i++) { xml.WriteStartElement("subelement"); xml.WriteAttributeString("attrib1", "value1"); xml.WriteAttributeString("attrib2", i.ToString()); for (int j = 0; j < 10; j++){ xml.WriteStartElement("subsubelement"); xml.WriteAttributeString("attr", j.ToString()); xml.WriteEndElement(); } xml.WriteEndElement(); } xml.WriteEndElement(); xml.WriteEndDocument(); xml.Close();

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

การเขียนเอกสารเริ่มต้นด้วยการเรียกเมธอด WriteStartDocument () ของอ็อบเจ็กต์ xml ของเรา บรรทัดที่ตามมาจะเพิ่มองค์ประกอบรูท "องค์ประกอบรูท" ให้กับเอกสาร XML ของเรา (จำได้ว่าสำหรับเอกสาร XML องค์ประกอบรูทจะต้องปรากฏในอินสแตนซ์เดียว) ต่อไป ในลูป เราจะเพิ่มองค์ประกอบอีก 10 องค์ประกอบที่ไม่มีการโหลดความหมายใดๆ ให้กับเอกสาร XML ของเรา โดยแต่ละองค์ประกอบเราได้ตั้งค่าแอตทริบิวต์ 2 รายการและองค์ประกอบย่อยอีก 10 รายการ โปรดทราบว่าเราสามารถเพิ่มตัวเลขลงในสตริงได้โดยไม่ต้องแปลงข้อมูลอย่างชัดเจน แต่หากตัวเลขนั้นต้องสร้างเป็นสตริงโดยสมบูรณ์ ก็จะต้องแปลงตัวเลขนั้นอย่างชัดเจนด้วยเมธอด ToString() โปรดทราบว่าเราต้องปิดแต่ละองค์ประกอบของเอกสาร XML ของเราอย่างชัดเจน จากนั้นจึงปิดทั้งเอกสาร

เมื่อเขียนเอกสาร XML ของเราสำเร็จแล้ว มาดูกันว่าเราจะอ่านข้อมูลจากเอกสารนั้นได้อย่างไร


การอ่านข้อมูล

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

ตามปกติเราจะมาทำความรู้จักกับโค้ดโปรแกรมก่อนแล้วจึงค่อยดูว่าโค้ดนี้ทำอะไรกันแน่

XmlTextReader xml = XmlTextReader ใหม่ (ชื่อไฟล์); xml.WhitespaceHandling = WhitespaceHandling.None; int i = 0; ในขณะที่ (xml.Read())( ถ้า ((xml.NodeType == XmlNodeType.Element) & (xml.Name == "องค์ประกอบย่อย")) ( listBox1.Items.Add("องค์ประกอบย่อย " + i + " พบ") ; i++; listBox1.Items.Add(" " + xml.GetAttribute("attrib1")); listBox1.Items.Add(" " + xml.GetAttribute("attrib2")); ในขณะที่ (xml.Read()&( xml.Name == "องค์ประกอบย่อย"))( listBox1.Items.Add(" " + xml.GetAttribute("attr")); ) ) ) xml.Close();

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

ถัดมาเป็นวงจรของการอ่านข้อมูลจากไฟล์โดยตรง เมธอด Read() อ่านองค์ประกอบถัดไปของเอกสาร XML และหลังจากอ่านแล้ว เราจะตรวจสอบสิ่งที่เราอ่านอย่างแน่นอน หากเป็น "องค์ประกอบย่อย" จริงๆ เราจะเพิ่มข้อมูลเกี่ยวกับองค์ประกอบที่อ่านลงใน listBox1 เพิ่มตัวแปรที่มีจำนวนองค์ประกอบที่อ่าน จากนั้นอ่านแอตทริบิวต์ขององค์ประกอบ หลังจากอ่านแอตทริบิวต์แล้ว เราจะจัดระเบียบ loop แยกต่างหากสำหรับการอ่านองค์ประกอบย่อย "subsubelement" (โปรดทราบว่าเราไม่จำเป็นต้องมี XmlTextReader แยกต่างหากสำหรับสิ่งนี้) และแอตทริบิวต์ขององค์ประกอบย่อยเหล่านี้ เหมือนเมื่อก่อน เราป้อนข้อมูลการอ่านทั้งหมดลงใน listBox1 เพื่อควบคุม การอ่านที่ถูกต้อง

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


เบื้องหลัง

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

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

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