§

วาง XML

§

ตัวเลือก

โหมด
การเยื้อง
การประกาศ XML
แท็ก void ที่ปิดตัวเอง
§

ผลลัพธ์ที่จัดรูปแบบแล้ว

xml

การจัดรูปแบบ XML ให้ประโยชน์จริงกับงานในไทย: ระบบ e-Tax XML ของกรมสรรพากรกำหนดให้นิติบุคคลส่งใบกำกับภาษีอิเล็กทรอนิกส์รายเดือนตามสคีมา XML ที่ลงนามดิจิทัล ขณะที่ระบบ SOAP เดิมของธนาคารกรุงเทพและ KBank ยังคงรับส่ง message XML กับ core banking และฝ่ายชำระเงิน ก.ล.ต. ไทยให้บริษัทจดทะเบียนส่งงบการเงิน XBRL ทุกไตรมาส นักพัฒนาดึง RSS feed ของ Thai PBS และ Bangkok Post เพื่อสร้าง aggregator ข่าว มาตรฐาน XML จาก DGA ใช้สำหรับข้อมูลภาครัฐ ETDA กำหนด XML สำหรับ Digital ID นักวิจัยที่ NSTDA และ NECTEC แลกเปลี่ยนชุดข้อมูล XML และห้องสมุดแห่งชาติร่วมกับ SIPA เผยแพร่คลังเอกสาร XML สำหรับการเก็บถาวรระยะยาว

การจัดรูปแบบ XML คืออะไร?

XML (Extensible Markup Language) คือรูปแบบข้อความที่ได้รับมาตรฐาน W3C สำหรับเอกสารที่มีโครงสร้างและการแลกเปลี่ยนข้อมูล การจัดรูปแบบ — เรียกอีกอย่างว่า pretty-printing หรือ beautifying — รับแหล่งที่มา XML ที่ well-formed แล้วเยื้องใหม่เพื่อให้แต่ละองค์ประกอบ แอตทริบิวต์ ความคิดเห็น processing instruction และส่วน CDATA ดูได้ง่าย ต้นไม้เอกสารที่แยกวิเคราะห์แล้วถูกรักษาไว้อย่างแม่นยำ มีเพียงช่องว่างระหว่างองค์ประกอบเท่านั้นที่เปลี่ยนแปลง

การจัดรูปแบบ XML ทำงานอย่างไร?

ข้อมูลของคุณถูกประมวลผลทั้งหมดในเบราว์เซอร์โดยใช้ API DOMParser และ XMLSerializer ดั้งเดิม รวมกับตัวเยื้องแบบเรียกซ้ำที่กำหนดเอง ขั้นตอนหลักคือ:

  1. อินพุตของคุณถูกอ่านจาก textarea ตามตัวอักษร — ทุกไบต์ที่คุณวางจะอยู่ในหน่วยความจำในเครื่อง
  2. เบราว์เซอร์แยกวิเคราะห์ด้วย new DOMParser().parseFromString(text, 'application/xml') หากอินพุตไม่ well-formed ตัวแยกวิเคราะห์จะแทรกโหนด <parsererror> ที่ payload ข้อความมีคำแนะนำเรื่องบรรทัดและคอลัมน์จากเอนจิน — แสดงตามต้นฉบับในแถบข้อผิดพลาด
  3. เมื่อแยกวิเคราะห์สำเร็จ ตัวเยื้องที่กำหนดเองเดินใน DOM tree แบบ depth-first ส่งออกแต่ละองค์ประกอบ ชุดแอตทริบิวต์ ส่วน CDATA ความคิดเห็น และ processing instruction บนบรรทัดของตัวเองที่ความลึกปัจจุบัน แท็ก void ที่ปิดตัวเองจะถูกเคารพเมื่อเปิดตัวเลือก
  4. โหมดบีบอัดกลับด้านไปป์ไลน์: XMLSerializer().serializeToString(doc) ส่งออกรูปแบบบรรทัดเดียว จากนั้น regex ที่มีการป้องกันลบช่องว่างระหว่างองค์ประกอบโดยไม่แตะข้อความภายในบล็อก CDATA หรือโหนดข้อความที่ไม่ใช่ช่องว่าง
  5. ผลลัพธ์ถูกเขียนลงใน 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