การจัดรูปแบบ XML คืออะไร?
XML (Extensible Markup Language) คือรูปแบบข้อความที่ได้รับมาตรฐาน W3C สำหรับเอกสารที่มีโครงสร้างและการแลกเปลี่ยนข้อมูล การจัดรูปแบบ — เรียกอีกอย่างว่า pretty-printing หรือ beautifying — รับแหล่งที่มา XML ที่ well-formed แล้วเยื้องใหม่เพื่อให้แต่ละองค์ประกอบ แอตทริบิวต์ ความคิดเห็น processing instruction และส่วน CDATA ดูได้ง่าย ต้นไม้เอกสารที่แยกวิเคราะห์แล้วถูกรักษาไว้อย่างแม่นยำ มีเพียงช่องว่างระหว่างองค์ประกอบเท่านั้นที่เปลี่ยนแปลง
การจัดรูปแบบ XML ทำงานอย่างไร?
ข้อมูลของคุณถูกประมวลผลทั้งหมดในเบราว์เซอร์โดยใช้ API DOMParser และ XMLSerializer ดั้งเดิม รวมกับตัวเยื้องแบบเรียกซ้ำที่กำหนดเอง ขั้นตอนหลักคือ:
- อินพุตของคุณถูกอ่านจาก textarea ตามตัวอักษร — ทุกไบต์ที่คุณวางจะอยู่ในหน่วยความจำในเครื่อง
- เบราว์เซอร์แยกวิเคราะห์ด้วย
new DOMParser().parseFromString(text, 'application/xml')หากอินพุตไม่ well-formed ตัวแยกวิเคราะห์จะแทรกโหนด<parsererror>ที่ payload ข้อความมีคำแนะนำเรื่องบรรทัดและคอลัมน์จากเอนจิน — แสดงตามต้นฉบับในแถบข้อผิดพลาด - เมื่อแยกวิเคราะห์สำเร็จ ตัวเยื้องที่กำหนดเองเดินใน DOM tree แบบ depth-first ส่งออกแต่ละองค์ประกอบ ชุดแอตทริบิวต์ ส่วน CDATA ความคิดเห็น และ processing instruction บนบรรทัดของตัวเองที่ความลึกปัจจุบัน แท็ก void ที่ปิดตัวเองจะถูกเคารพเมื่อเปิดตัวเลือก
- โหมดบีบอัดกลับด้านไปป์ไลน์:
XMLSerializer().serializeToString(doc)ส่งออกรูปแบบบรรทัดเดียว จากนั้น regex ที่มีการป้องกันลบช่องว่างระหว่างองค์ประกอบโดยไม่แตะข้อความภายในบล็อก CDATA หรือโหนดข้อความที่ไม่ใช่ช่องว่าง - ผลลัพธ์ถูกเขียนลงใน textarea แบบอ่านอย่างเดียว แถบข้อผิดพลาดถูกล้าง และปุ่มดาวน์โหลดบรรจุผลลัพธ์เป็นไฟล์
.xmlที่คุณสามารถส่งหรือแนบกับ ticket ได้
ทำไมจึง pretty-print XML ด้วยเครื่องมือนี้?
- ความเป็นส่วนตัว: ทุกครั้งที่แยกวิเคราะห์ จัดรูปแบบ และบีบอัดเกิดขึ้นในเบราว์เซอร์ของคุณ XML ไม่เคยถึงเซิร์ฟเวอร์ของเรา — ไม่อัปโหลด ไม่เก็บ telemetry ไม่ต้องมีบัญชี
- ข้อผิดพลาดที่แม่นยำ: เมื่ออินพุตผิดรูปแบบ ตัวแยกวิเคราะห์จะแสดงบรรทัดและคอลัมน์ที่เอนจินของเบราว์เซอร์รายงานเอง ไม่ใช่การคาดเดาแบบสังเคราะห์ — ตัวเลขเดียวกับที่คุณจะเห็นใน DevTools
- Round-trip ที่ซื่อตรง: จัดรูปแบบแล้วบีบอัด คุณจะได้ค่า byte-equivalent ของเอกสารดั้งเดิมกลับมา (ยกเว้นตัวเลือกการประกาศ XML) — การจัดรูปแบบจะไม่ re-canonicalise namespace หรือจัดเรียงแอตทริบิวต์ใหม่
- รวดเร็ว: DOMParser ดั้งเดิมบวกตัวเยื้องประมาณ 60 บรรทัดจัดการ envelope SOAP และก้อน OOXML ขนาดหลายเมกะไบต์ได้ทันทีโดยไม่ต้องโหลดไลบรารีภายนอก
การใช้งานทั่วไปของการจัดรูปแบบ XML มีอะไรบ้าง?
การ pretty-print XML ปรากฏในการเผยแพร่เว็บ การบูรณาการระดับองค์กร และการเก็บถาวรข้อมูล:
- การตรวจสอบ RSS / Atom feed: วาง body ของพอดแคสต์หรือ feed ข่าวเพื่อยืนยัน channel metadata ลำดับ item และ namespace prefix ก่อนเผยแพร่
- การ debug SOAP: จัดรูปแบบ envelope ที่คัดลอกจาก Wireshark หรือ log ของ SOAP client เพื่อให้ส่วน Header, Body และ Fault มองเห็นได้ในแวบเดียว
- การตรวจสอบ sitemap: เยื้อง sitemap.xml ที่ดึงจากคู่แข่งหรือไซต์ staging ของคุณใหม่เพื่อนับ entry และยืนยัน hreflang alternates ของแต่ละ URL
ตัวอย่างการจัดรูปแบบ XML มีลักษณะอย่างไร?
การวาง <feed><entry><title>Hello</title></entry></feed> ที่ประกอบด้วยสามองค์ประกอบและกด จัดรูปแบบ ด้วยตัวเลือกการเยื้อง 2 ช่องว่างให้เอกสารสี่บรรทัดโดยแต่ละองค์ประกอบอยู่บนบรรทัดของตัวเอง เยื้องตามความลึก การสลับเป็น Minify บนอินพุตเดียวกันจะย่อกลับเป็น byte-string เดิม Round-trip ไม่มีการสูญเสียสำหรับเอกสาร well-formed ทุกอัน
เครื่องมือนี้ทำงานออฟไลน์หรือไม่?
ใช่ ไปป์ไลน์การจัดรูปแบบและบีบอัดเป็น DOMParser + XMLSerializer ล้วน ๆ พร้อมตัวเยื้องแบบเรียกซ้ำขนาดเล็ก ทั้งหมดทำงานในแท็บเบราว์เซอร์ ไม่มีอะไรถูกอัปโหลด ไม่มี service worker ทำหน้าที่พร็อกซีอินพุตของคุณ และหน้าเว็บไม่ส่งคำขอเครือข่ายสำหรับขั้นตอนการจัดรูปแบบเลย ลำเลียงออกเพียงอย่างเดียวคือทรัพยากรการโหลดหน้ามาตรฐาน (CSS, ฟอนต์, analytics) — XML ของคุณไม่เคยถึง Ultim8Soft
การจัดรูปแบบเปลี่ยนเอกสารหรือไม่?
ไม่มีการเปลี่ยนแปลงเชิงความหมาย การจัดรูปแบบเขียนซ้ำเฉพาะช่องว่างระหว่างองค์ประกอบเท่านั้น ชื่อองค์ประกอบ ค่าแอตทริบิวต์ เนื้อหาข้อความ payload CDATA ความคิดเห็น และ processing instruction ถูกรักษาไว้ไบต์ต่อไบต์ การประกาศ namespace และ prefix ถูกเก็บไว้ตรงตามที่อินพุตเขียนไว้ — ตัวจัดรูปแบบไม่ re-canonicalise หรือจัดเรียงแอตทริบิวต์ใหม่ ผลลัพธ์แยกวิเคราะห์เป็น DOM tree เดียวกันกับอินพุต ยกเว้น toggle การประกาศ XML ที่เป็นทางเลือก
CDATA / ความคิดเห็น / processing instructions ถูกจัดการอย่างไร?
แต่ละชนิดถูกส่งออกตามต้นฉบับบนบรรทัดของตัวเองที่ความลึกการเยื้องปัจจุบัน payload CDATA ห่อด้วย <![CDATA[…]]> โดยไม่มีการเยื้องซ้ำภายใน — สเปคบอกว่าเนื้อหา CDATA เป็น opaque ดังนั้นตัวจัดรูปแบบจะไม่แตะมันเลย ความคิดเห็นใช้ <!-- … --> ส่วน processing instructions ใช้ <?target data?> ทั้งสามรอด round-trip จัดรูปแบบ → บีบอัด → จัดรูปแบบ โดยเนื้อหายังคงสมบูรณ์
การจัดรูปแบบและการบีบอัด XML ต่างกันอย่างไร?
การจัดรูปแบบขยายช่องว่างเพื่อให้มนุษย์อ่านต้นไม้เอกสารได้ การบีบอัดลบช่องว่างเหล่านั้นออกเพื่อการส่งและจัดเก็บ ทั้งสองทำงานบน DOM ที่แยกวิเคราะห์แล้ว ไม่ใช่บนสตริงไบต์ดิบ ดังนั้น round-trip จัดรูปแบบ → บีบอัด บนเอกสาร well-formed จะให้ค่า byte-equivalent ของรูปแบบ minified ดั้งเดิม ใช้ทิศทางจัดรูปแบบเมื่อคุณต้องการอ่านหรือ diff payload XML และใช้ทิศทางบีบอัดเมื่อคุณต้องการส่งผ่าน API gateway ที่คิดเงินหรือฝังภายในเอกสารอื่น
ตัวจัดรูปแบบ XML นี้ใช้ parser ตัวเดียวกับที่เบราว์เซอร์ของคุณใช้สำหรับการตอบกลับ AJAX XHR และเอกสาร SVG ดังนั้น XML ที่ well-formed ใด ๆ — RSS, Atom, SOAP, sitemap, OOXML, SVG — จะ round-trip ได้อย่างสะอาด วาง XML ใด ๆ ด้านบน คัดลอกผลลัพธ์ หรือดาวน์โหลดเป็นไฟล์ .xml