ToolDeck

ตัวย่อ XML

ย่อขนาด XML โดยลบช่องว่างและ comment ออก

ลองตัวอย่าง

ป้อนข้อมูล XML

XML ที่ย่อขนาดแล้ว

ประมวลผลในเครื่อง · ปลอดภัยในการวางข้อมูลลับ
XML ที่ย่อขนาดแล้วจะปรากฏที่นี่…

XML Minification คืออะไร?

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

ข้อกำหนด XML 1.0 (W3C Recommendation ฉบับที่ห้า) กำหนดกฎการจัดการช่องว่างในหัวข้อ 2.10 ช่องว่างระหว่าง tag ที่ไม่มีค่าเชิงความหมายเรียกว่า "insignificant whitespace" XML processor อนุญาตให้ละทิ้งช่องว่างดังกล่าวได้ อย่างไรก็ตาม ช่องว่างภายในเนื้อหาข้อความมีความหมายโดยค่าเริ่มต้น เว้นแต่ parent element จะประกาศ xml:space="default" ตัวย่อ XML ที่ถูกต้องจะแยกแยะสองกรณีนี้และลบเฉพาะสิ่งที่ปลอดภัยเท่านั้น

Minification แตกต่างจาก compression Gzip หรือ Brotli ลดขนาดที่ชั้น transport และต้องการขั้นตอน decompression ก่อน parse Minification ลดขนาดเอกสารดิบโดยตรง ทำให้ XML ยังคงถูกต้องและ parser ใดก็อ่านได้โดยไม่ต้องแตกไฟล์ก่อน ในทางปฏิบัติ การ minify ก่อน compress ให้ผลดีที่สุด: ลบอักขระซ้ำซ้อนก่อน จากนั้น compression algorithm จึงทำงานบนข้อมูลที่กระชับขึ้น

Before · xml
After · xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- Product catalog for Q1 2026 -->
<catalog>
  <product id="p101">
    <name>Widget A</name>
    <price currency="USD">29.99</price>
    <!-- Temporarily discounted -->
    <stock>142</stock>
  </product>
  <product id="p102">
    <name>Widget B</name>
    <price currency="EUR">19.50</price>
    <stock>87</stock>
  </product>
</catalog>
<?xml version="1.0" encoding="UTF-8"?><catalog><product id="p101"><name>Widget A</name><price currency="USD">29.99</price><stock>142</stock></product><product id="p102"><name>Widget B</name><price currency="EUR">19.50</price><stock>87</stock></product></catalog>

ทำไมต้องใช้ตัวย่อ XML?

XML ที่จัดรูปแบบพร้อมการย่อหน้าและ comment เหมาะสำหรับการพัฒนาและ code review สำหรับการจัดเก็บ การส่งข้อมูล และการประมวลผลโดยเครื่อง การจัดรูปแบบพิเศษเหล่านั้นเพิ่มขนาดโดยไม่มีประโยชน์ ตัวย่อ XML ช่วยปิดช่องว่างนั้น

ลดขนาดการส่งข้อมูลได้ทันที
การลบช่องว่างและ comment จากไฟล์ XML config ทั่วไปช่วยลดขนาดได้ 20-40% สำหรับ SOAP payload และ feed ขนาดใหญ่ การประหยัดมักเกิน 30% ช่วยลดค่า bandwidth และเวลาตอบสนองของ API
🔒
ทำงานฝั่ง client ไม่ต้องอัปโหลด
ตัวย่อทำงานในเบราว์เซอร์โดยใช้ DOMParser ดั้งเดิม ไม่มีข้อมูลใดถูกส่งไปยังเซิร์ฟเวอร์ การประมวลผลเกิดขึ้นในเครื่องของคุณโดยไม่ขึ้นกับเนื้อหาของ XML
📦
ไม่ต้องสมัครสมาชิกหรือติดตั้ง
วาง XML แล้วรับผลลัพธ์ที่ย่อขนาดแล้ว ไม่ต้องสร้างบัญชี ไม่ต้องติดตั้ง CLI tool ไม่มี dependency ใช้ได้บนทุกอุปกรณ์ที่มีเบราว์เซอร์ทันสมัย
🔧
รองรับ XML ที่ well-formed ทุกรูปแบบ
รองรับ namespace, CDATA section, processing instruction และโครงสร้างที่ซ้อนลึก หาก input เป็น XML ที่ well-formed ตัวย่อจะสร้าง output ที่ย่อขนาดแล้วและถูกต้องเสมอ

กรณีการใช้งานตัวย่อ XML

การพัฒนา frontend
ย่อขนาดไฟล์ SVG ที่ฝังอยู่ใน HTML หรือ CSS การลบช่องว่างและ comment จากมาร์กอัป SVG ช่วยลดน้ำหนักหน้าโดยไม่เปลี่ยนแปลงรูปกราฟิกที่แสดงผล แม้แต่ชุด SVG icon ขนาดเล็กก็สามารถลดได้หลาย kilobyte
การปรับแต่ง backend API
บีบอัด SOAP response และ XML-RPC payload ก่อนส่งไปยัง client XML ที่ย่อขนาดแล้ว parse ได้เร็วขึ้นและลด network latency สำหรับบริการที่มีปริมาณงานสูง ประโยชน์มากที่สุดเมื่อ response ยังไม่ได้ compress ที่ชั้น transport
DevOps และ CI/CD pipeline
ย่อขนาดไฟล์ XML config (pom.xml, web.xml, .csproj) ใน build pipeline เพื่อลดขนาด artifact ใน Docker image และแพ็กเกจสำหรับ deploy image ที่เล็กลงหมายถึงเวลา pull ที่เร็วขึ้นและค่าจัดเก็บใน container registry ที่ต่ำลง
QA และการทดสอบ
ทำให้ XML test fixture เป็นรูปแบบมาตรฐานโดยย่อขนาดก่อนเปรียบเทียบ การลบความแตกต่างของการจัดรูปแบบป้องกัน test failure ที่เกิดจากการเปลี่ยนแปลงเฉพาะช่องว่าง Fixture ที่ย่อขนาดแล้วยังทำให้ version-control diff ตรวจสอบได้ง่ายขึ้น
วิศวกรรมข้อมูล
บีบอัด XML data feed ขนาดใหญ่ (RSS, Atom, XBRL) ก่อนจัดเก็บในฐานข้อมูลหรือ message queue payload ที่เล็กลงหมายถึงค่าจัดเก็บที่ต่ำลงและ queue throughput ที่เร็วขึ้น ในระดับขนาดใหญ่ การลดขนาด feed 20% สะสมได้มากในต้นทุน compute และ I/O
การเรียนรู้โครงสร้าง XML
นักเรียนสามารถย่อขนาดแล้วจัดรูปแบบใหม่ XML เพื่อทำความเข้าใจว่า parser ละเว้น insignificant whitespace อย่างไร และทำไมโครงสร้างเอกสารจึงเป็นอิสระจากการจัดรูปแบบภาพ แบบฝึกหัดนี้ทำให้กฎของ spec ที่เป็นนามธรรมมองเห็นได้ชัดเจนทันที

สิ่งที่ XML Minification ลบออก

ไม่ใช่ทุกอย่างในเอกสาร XML ที่ลบออกได้อย่างปลอดภัย ตารางอ้างอิงนี้แสดงแต่ละประเภทของเนื้อหาที่ลบได้และว่าการลบทิ้งนั้นปลอดภัยเสมอหรือขึ้นอยู่กับกรณีการใช้งาน

รายการตัวอย่างความปลอดภัย
IndentationSpaces/tabs before tagsAlways safe to remove
Line breaks\n and \r\n between tagsAlways safe to remove
Comments<!-- ... -->Safe unless parsed by app
XML declaration<?xml version="1.0"?>Keep if encoding is non-UTF-8
Processing instructions<?xml-stylesheet ...?>Keep if consumed downstream
Trailing whitespaceSpaces after closing tagsAlways safe to remove
Text node whitespaceSpaces inside text contentRemove only between tags, not within

Minification เทียบกับ Gzip เทียบกับ Binary Format

Minification, compression และ binary encoding ต่างมุ่งเป้าไปที่ชั้นต่างกันของปัญหาขนาด Minification คงผลลัพธ์เป็น XML ที่ถูกต้องและมนุษย์อ่านได้ Compression (gzip, Brotli) ลดขนาดได้มากกว่าแต่ต้องมีขั้นตอน decompression ก่อน parse Binary format ลดได้มากที่สุดแต่ทั้งสองฝั่งต้องมี encoder/decoder ที่เข้ากันได้ ใช้งานจริงส่วนใหญ่สำหรับระบบ embedded หรือบริการ enterprise ที่ใช้ WSDL หนัก

XML Minification
ลบ insignificant whitespace, comment และการขึ้นบรรทัดใหม่ออก ผลลัพธ์ยังคงเป็น XML ที่ถูกต้อง parser ใดก็อ่านได้ การลดขนาดทั่วไป: 20-40% ไม่ต้องมีขั้นตอน decompression
Gzip / Brotli Compression
ใช้ compression algorithm กับ byte stream การลดขนาดทั่วไป: 60-80% บนผลลัพธ์ที่ minify แล้ว ต้องมีขั้นตอน decompression ก่อน parse XML ได้ เป็นมาตรฐานสำหรับ HTTP ผ่าน Content-Encoding
Binary Format (EXI, Fast Infoset)
เข้ารหัส XML Infoset ในรูปแบบ binary การลดขนาดทั่วไป: 80-95% ต้องมี encoder/decoder ที่เข้ากันได้ทั้งสองฝั่ง ใช้ในสภาพแวดล้อมที่จำกัดเช่นระบบ embedded และบริการ WSDL-heavy

ตัวอย่างโค้ด

การย่อขนาด XML ด้วยโปรแกรมทำตามรูปแบบเดียวกันในทุกภาษา: parse เอกสารเป็น tree, ลบ comment node ตามต้องการ แล้ว serialize โดยไม่มีการย่อหน้า

JavaScript (browser)
// Minify XML by parsing and re-serializing (strips formatting)
const raw = `<root>
  <item id="1">
    <!-- note -->
    <name>Test</name>
  </item>
</root>`

const parser = new DOMParser()
const doc = parser.parseFromString(raw, 'application/xml')

// Remove comment nodes
const walker = doc.createTreeWalker(doc, NodeFilter.SHOW_COMMENT)
const comments = []
while (walker.nextNode()) comments.push(walker.currentNode)
comments.forEach(c => c.parentNode.removeChild(c))

const minified = new XMLSerializer().serializeToString(doc)
// → "<root><item id=\"1\"><name>Test</name></item></root>"
Python
from lxml import etree

xml = """<root>
  <item id="1">
    <!-- note -->
    <name>Test</name>
  </item>
</root>"""

tree = etree.fromstring(xml.encode())

# Remove comments
for comment in tree.iter(etree.Comment):
    comment.getparent().remove(comment)

# Serialize without pretty-print (minified)
result = etree.tostring(tree, xml_declaration=False).decode()
# → '<root><item id="1"><name>Test</name></item></root>'

# With xml.etree (stdlib, no lxml needed)
import xml.etree.ElementTree as ET
root = ET.fromstring(xml)
ET.indent(root, space='')  # Python 3.9+
print(ET.tostring(root, encoding='unicode'))
Go
package main

import (
    "encoding/xml"
    "fmt"
    "strings"
)

func minifyXML(input string) (string, error) {
    decoder := xml.NewDecoder(strings.NewReader(input))
    var out strings.Builder
    encoder := xml.NewEncoder(&out)
    // No indentation = minified output
    for {
        tok, err := decoder.Token()
        if err != nil {
            break
        }
        // Skip comments
        if _, ok := tok.(xml.Comment); ok {
            continue
        }
        // Skip whitespace-only char data
        if cd, ok := tok.(xml.CharData); ok {
            if strings.TrimSpace(string(cd)) == "" {
                continue
            }
        }
        encoder.EncodeToken(tok)
    }
    encoder.Flush()
    return out.String(), nil
}
// minifyXML("<a>\n  <b>1</b>\n</a>") → "<a><b>1</b></a>"
CLI (xmllint)
# Minify XML with xmllint (part of libxml2)
xmllint --noblanks input.xml > minified.xml

# Minify from stdin
echo '<root>
  <item>hello</item>
</root>' | xmllint --noblanks -
# → <?xml version="1.0"?><root><item>hello</item></root>

# Strip comments too (combine with sed or xmlstarlet)
xmlstarlet ed -d '//comment()' input.xml | xmllint --noblanks -

# Check size reduction
echo "Before: $(wc -c < input.xml) bytes"
echo "After:  $(xmllint --noblanks input.xml | wc -c) bytes"

คำถามที่พบบ่อย

XML ที่ย่อขนาดแล้วยังคงเป็น XML ที่ถูกต้องหรือไม่?
ใช่ Minification ลบเฉพาะ insignificant whitespace และ comment เอกสารผลลัพธ์ยังคงสอดคล้องกับข้อกำหนด XML 1.0 หรือ 1.1 เดิม parser ที่สอดคล้องมาตรฐานใดก็จะสร้าง data model เหมือนกันจากทั้งเวอร์ชันที่จัดรูปแบบและเวอร์ชันที่ย่อขนาดแล้ว
XML จะเล็กลงแค่ไหนหลัง minification?
การประหยัดขึ้นอยู่กับการจัดรูปแบบของต้นฉบับ XML ที่มีการย่อหน้าลึกพร้อม comment มักจะเล็กลง 20-40% เอกสารที่กระชับอยู่แล้วอาจลดได้แค่ 5-10% เปรียบเทียบจำนวน byte ของ input และ output เพื่อวัดการลดที่แน่นอน
Minification จะทำให้ XML เสียหายได้หรือไม่?
หากตัวย่อลบเฉพาะช่องว่างระหว่าง tag (insignificant whitespace) และ comment ความหมายของเอกสารจะยังคงเดิม ข้อยกเว้นหนึ่งคือส่วนที่มี xml:space="preserve" ซึ่งช่องว่างภายใน text node มีความหมาย ตัวย่อที่ถูกต้องจะปฏิบัติตาม directive นี้และปล่อยส่วนเหล่านั้นไว้โดยไม่แตะต้อง
ความแตกต่างระหว่าง XML minification และ XML compression คืออะไร?
Minification แก้ไขข้อความ XML เองโดยลบอักขระที่ไม่มีข้อมูล Compression (gzip, Brotli) เข้ารหัส byte stream ทั้งหมดเป็นรูปแบบ binary ที่เล็กลงซึ่งต้องแตกก่อน parse Minification และ compression เสริมกัน: minify ก่อน จากนั้น compress สำหรับการส่งข้อมูล
ควร minify XML ก่อนจัดเก็บในฐานข้อมูลหรือไม่?
สำหรับ XML ปริมาณมาก การ minify ก่อนจัดเก็บช่วยลดพื้นที่ดิสก์และเพิ่มความเร็วในการอ่าน สำหรับไฟล์ config หรือ template ที่นักพัฒนาแก้ไขด้วยมือ ให้เก็บเวอร์ชันที่จัดรูปแบบแล้วและ minify ตอน build หรือตอนส่งข้อมูล ข้อแลกเปลี่ยนคือความสะดวกในการอ่านกับประสิทธิภาพการจัดเก็บ หลีกเลี่ยงการ minify XML ที่ต้องตรวจสอบ, diff ใน version control หรือแก้ไขด้วยมือโดยทีม operations
xmllint รองรับ minification หรือไม่?
รองรับ การรัน xmllint --noblanks input.xml จะลบ insignificant whitespace ออก แต่จะไม่ลบ comment โดยค่าเริ่มต้น หากต้องการลบ comment ด้วย ให้ pipe ผ่าน xmlstarlet ed -d '//comment()' ก่อน หรือใช้ XSLT แบบกำหนดเองที่ลบ comment node
Minification ส่งผลต่อประสิทธิภาพการ parse XML อย่างไร?
XML ที่ย่อขนาดแล้ว parse ได้เร็วขึ้นเพราะ parser ประมวลผล byte น้อยลงและไม่พบ text node ที่เป็นช่องว่างล้วน ความแตกต่างเห็นได้ชัดที่สุดในเอกสารขนาดใหญ่ (1 MB ขึ้นไป) และใน streaming parser ที่ node พิเศษแต่ละตัวเพิ่มค่าใช้จ่ายในการ traverse