XML ফরম্যাটার
সিনট্যাক্স হাইলাইটিং সহ XML ফরম্যাট ও প্রিটি-প্রিন্ট করুন
XML ইনপুট
ফরম্যাট করা XML
XML ফরম্যাটিং কী?
XML ফরম্যাটিং (যাকে XML প্রিটি-প্রিন্টিং বা XML বিউটিফিকেশনও বলা হয়) হলো একটি XML ডকুমেন্টে সামঞ্জস্যপূর্ণ ইন্ডেন্টেশন ও লাইন ব্রেক যোগ করার প্রক্রিয়া, যাতে এর শ্রেণিবদ্ধ কাঠামো দৃশ্যমান হয়। API, কনফিগ জেনারেটর বা সিরিয়ালাইজার থেকে পাওয়া কাঁচা XML প্রায়ই ট্যাগগুলোর মধ্যে কোনো হোয়াইটস্পেস ছাড়াই একটি একক লাইনে আসে। একটি XML ফরম্যাটার ঐ ডকুমেন্টটিকে একটি ট্রিতে পার্স করে, তারপর সুসংগত স্পেসিং সহ পুনরায় সিরিয়ালাইজ করে। এই রূপান্তর ডকুমেন্টের কোনো তথ্য পরিবর্তন করে না — শুধুমাত্র উপস্থাপনা উন্নত করে।
XML 1.0 স্পেসিফিকেশন (W3C Recommendation, পঞ্চম সংস্করণ) একটি কঠোর ব্যাকরণ সংজ্ঞায়িত করে যেখানে প্রতিটি ওপেনিং ট্যাগের একটি সংগতিপূর্ণ ক্লোজিং ট্যাগ থাকতে হবে অথবা সেলফ-ক্লোজিং হতে হবে, অ্যাট্রিবিউটগুলো কোটেড হতে হবে, এবং পাঁচটি বর্ণ (<, >, &, ", ') এন্টিটি এস্কেপিং প্রয়োজন। একটি ফরম্যাটারকে এই নিয়মগুলো মেনে চলতে হবে এবং একই সাথে শুধুমাত্র অ-গুরুত্বপূর্ণ হোয়াইটস্পেস যোগ করতে হবে যা ডকুমেন্টের তথ্য সেট (ইনফোসেট) পরিবর্তন করে না।
ফরম্যাট করা XML কোড রিভিউতে পড়া সহজ, ভার্সন কন্ট্রোলে ডিফ করা সহজ, এবং কোনো সার্ভিস অপ্রত্যাশিত ডেটা ফেরত দিলে ডিবাগ করা সহজ। ফরম্যাটিং অপারেশনটি নিজেই ক্ষতিহীন: ডকুমেন্টের যৌক্তিক বিষয়বস্তু অপরিবর্তিত থাকে, শুধুমাত্র উপস্থাপনা পরিবর্তন হয়। git diff এবং পুল-রিকোয়েস্ট রিভিউ প্ল্যাটফর্মের মতো টুলগুলো শুধুমাত্র পরিবর্তিত লাইনগুলো দেখায় — সামঞ্জস্যপূর্ণভাবে ইন্ডেন্ট করা XML নিশ্চিত করে যে ঐ ডিফগুলো প্রকৃত পরিবর্তন প্রতিফলিত করে, রিফরম্যাটিং নয়।
<catalog><book id="bk101"><author>Gambardella, Matthew</author><title>XML Developer's Guide</title><genre>Computer</genre><price>44.95</price><publish_date>2000-10-01</publish_date></book><book id="bk102"><author>Ralls, Kim</author><title>Midnight Rain</title><genre>Fantasy</genre><price>5.95</price><publish_date>2000-12-16</publish_date></book></catalog>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
</book>
<book id="bk102">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-12-16</publish_date>
</book>
</catalog>অনলাইন XML ফরম্যাটার কেন ব্যবহার করবেন?
হাতে XML ফরম্যাট করা ত্রুটি-প্রবণ এবং ধীর, বিশেষত গভীর নেস্টিং বা মিশ্র নেমস্পেস সহ ডকুমেন্টের জন্য। একটি ব্রাউজার-ভিত্তিক ফরম্যাটার ফাইলের আকার নির্বিশেষে এক সেকেন্ডেরও কম সময়ে ফরম্যাট করে দেয়।
XML ফরম্যাটারের ব্যবহারের ক্ষেত্র
XML পূর্বনির্ধারিত এন্টিটি রেফারেন্স
XML তার সিনট্যাক্সের জন্য পাঁচটি বর্ণ সংরক্ষিত রাখে। যখন এই বর্ণগুলো আক্ষরিক টেক্সট কন্টেন্ট বা অ্যাট্রিবিউট মানে দেখা যায়, তখন সেগুলোকে পূর্বনির্ধারিত এন্টিটি রেফারেন্স দিয়ে প্রতিস্থাপন করতে হবে। একটি সঠিক ফরম্যাটার প্রিটি-প্রিন্টিংয়ের সময় এই এন্টিটিগুলো সংরক্ষণ করে।
| বর্ণ | XML-এ ভূমিকা | এন্টিটি |
|---|---|---|
| < | Start of tag | < |
| > | End of tag | > |
| & | Start of entity | & |
| " | Attribute delimiter | " |
| ' | Attribute delimiter | ' |
XML ইন্ডেন্টেশন স্টাইলের তুলনা
XML ইন্ডেন্টেশনের জন্য একটি একক মানদণ্ড নেই। পছন্দটি আপনার টিমের নিয়মাবলি ও পাইপলাইনের টুলগুলোর উপর নির্ভর করে। এখানে তিনটি সর্বাধিক সাধারণ স্টাইল রয়েছে।
কোড উদাহরণ: প্রোগ্রামেটিক্যালি XML ফরম্যাট করুন
যখন আপনাকে কোনো স্ক্রিপ্ট বা বিল্ড প্রক্রিয়ার ভিতরে XML ফরম্যাট করতে হবে, প্রতিটি প্রধান প্রোগ্রামিং ভাষায় একটি অন্তর্নির্মিত বা স্ট্যান্ডার্ড-লাইব্রেরি বিকল্প রয়েছে। নিচে কার্যকরী উদাহরণ রয়েছে যা আপনি সরাসরি কপি করতে পারেন।
const raw = '<root><item>hello</item></root>'
const parser = new DOMParser()
const doc = parser.parseFromString(raw, 'application/xml')
const serializer = new XMLSerializer()
const xml = serializer.serializeToString(doc)
// Indent with XSLT (browser-native approach)
const xslt = new DOMParser().parseFromString(`
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy><xsl:apply-templates select="node()|@*"/></xsl:copy>
</xsl:template>
</xsl:stylesheet>`, 'application/xml')
const proc = new XSLTProcessor()
proc.importStylesheet(xslt)
const formatted = proc.transformToDocument(doc)
console.log(new XMLSerializer().serializeToString(formatted))
// → <root>\n <item>hello</item>\n</root>import xml.dom.minidom raw = '<root><item>hello</item><item>world</item></root>' dom = xml.dom.minidom.parseString(raw) print(dom.toprettyxml(indent=' ')) # → <?xml version="1.0" ?> # → <root> # → <item>hello</item> # → <item>world</item> # → </root> # With lxml (handles namespaces, XSD, large files) from lxml import etree tree = etree.fromstring(raw.encode()) print(etree.tostring(tree, pretty_print=True).decode())
package main
import (
"encoding/xml"
"fmt"
"strings"
)
func formatXML(raw string) (string, error) {
decoder := xml.NewDecoder(strings.NewReader(raw))
var out strings.Builder
encoder := xml.NewEncoder(&out)
encoder.Indent("", " ")
for {
tok, err := decoder.Token()
if err != nil {
break
}
encoder.EncodeToken(tok)
}
encoder.Flush()
return out.String(), nil
}
// formatXML("<a><b>1</b></a>") → "<a>\n <b>1</b>\n</a>"# Format XML file with xmllint (part of libxml2, pre-installed on macOS/Linux) xmllint --format input.xml > formatted.xml # Format from stdin echo '<a><b>1</b></a>' | xmllint --format - # → <?xml version="1.0"?> # → <a> # → <b>1</b> # → </a> # Validate and format at the same time xmllint --format --schema schema.xsd input.xml