জাভাস্ক্রিপ্ট সহ প্রিন্টিং প্রিন্টিং এক্সএমএল


135

আমার কাছে একটি স্ট্রিং রয়েছে যা একটি নন-ইনডেন্টেড এক্সএমএলকে উপস্থাপন করে যা আমি বেশ-মুদ্রণ করতে চাই। উদাহরণ স্বরূপ:

<root><node/></root>

হওয়া উচিত:

<root>
  <node/>
</root>

সিনট্যাক্স হাইলাইটিংয়ের প্রয়োজন হয় না। সমস্যাটি মোকাবেলায় আমি প্রথমে এক্সএমএলকে গাড়ীর রিটার্ন এবং সাদা স্পেস যুক্ত করার জন্য রুপান্তর করব এবং তারপরে এক্সএমএল আউটপুট দেওয়ার জন্য প্রাক ট্যাগ ব্যবহার করব । নতুন লাইন এবং সাদা স্পেস যুক্ত করতে আমি নিম্নলিখিত ফাংশনটি লিখেছি:

function formatXml(xml) {
    var formatted = '';
    var reg = /(>)(<)(\/*)/g;
    xml = xml.replace(reg, '$1\r\n$2$3');
    var pad = 0;
    jQuery.each(xml.split('\r\n'), function(index, node) {
        var indent = 0;
        if (node.match( /.+<\/\w[^>]*>$/ )) {
            indent = 0;
        } else if (node.match( /^<\/\w/ )) {
            if (pad != 0) {
                pad -= 1;
            }
        } else if (node.match( /^<\w[^>]*[^\/]>.*$/ )) {
            indent = 1;
        } else {
            indent = 0;
        }

        var padding = '';
        for (var i = 0; i < pad; i++) {
            padding += '  ';
        }

        formatted += padding + node + '\r\n';
        pad += indent;
    });

    return formatted;
}

আমি তখন ফাংশনটি এভাবে কল করি:

jQuery('pre.formatted-xml').text(formatXml('<root><node1/></root>'));

এটি আমার পক্ষে পুরোপুরি সূক্ষ্ম কাজ করে তবে আমি পূর্ববর্তী ফাংশনটি লেখার সময় আমি ভেবেছিলাম আরও ভাল উপায় থাকতে হবে। সুতরাং আমার প্রশ্নটি কি আপনি কোনও এইচটিএমএল পৃষ্ঠাতে প্রিন্ট-প্রিন্ট করার জন্য কোনও এক্সএমএল স্ট্রিং দেওয়া আরও ভাল কোনও উপায় সম্পর্কে জানেন? যে কোনও জাভাস্ক্রিপ্ট ফ্রেমওয়ার্ক এবং / অথবা প্লাগইন যে কাজটি করতে পারে তা স্বাগত। আমার একমাত্র প্রয়োজন এটি ক্লায়েন্টের পক্ষে করা উচিত।


2
অভিনব এইচটিএমএল আউটপুট (আলা আইআই এক্সএমএল প্রদর্শন) এর জন্য, এক্সপ্যাথ ভিজ্যুয়ালাইজারে ব্যবহৃত এক্সএসএলটি রূপান্তর দেখুন। আপনি এক্সপাথ
দিমিত্রে নোভাচাচ

/.++\\ / ^উড়ল >> পত্র => - এই রেজিপ্লেক্সে "+" সরান কারণ কিছু জাভাস্ক্রিপ্ট ইঞ্জিনের কোডটি "ধীরে ধীরে মানযুক্ত" নোডের জন্য ধীর করে দেয়।
4esn0k

উত্তর:


58

প্রশ্নের পাঠ্য থেকে আমি ধারণাটি পাই যে এইচটিএমএল-ফর্ম্যাট ফলাফলের বিপরীতে স্ট্রিং ফলাফল প্রত্যাশিত

যদি এটি হয় তবে এটি অর্জনের সহজতম উপায় হ'ল এক্সএমএল ডকুমেন্টকে পরিচয় রূপান্তর এবং কোনও <xsl:output indent="yes"/>নির্দেশ দিয়ে প্রক্রিয়া করা :

<এক্সএসএল: স্টাইলশিট সংস্করণ = "1.0"
 xmlns: XSL = "http://www.w3.org/1999/XSL/Transform">
 <এক্সএসএল: আউটপুট ওমিট-এক্সএমএল-ঘোষণা = "হ্যাঁ" ইনডেন্ট = "হ্যাঁ" />

    <xsl: টেমপ্লেট মিল = "নোড () | @ *">
      <XSL: কপি>
        <xsl: প্রয়োগ-টেম্পলেটগুলি = "নোড () | @ *" /> নির্বাচন করুন
      </ XSL: কপি>
    </ XSL: টেমপ্লেট>
</ XSL: স্টাইলশীট>

প্রদত্ত এক্সএমএল ডকুমেন্টে এই রূপান্তরটি প্রয়োগ করার সময়:

<রুট> <নোড /> </ রুট>

বেশিরভাগ এক্সএসএলটি প্রসেসর (। নেট এক্সএসএলকম্পিল্ড ট্রান্সফর্ম, স্যাকসন 6.5.4 এবং স্যাকসন 9.0.0.2, অল্টোভাএক্সএমএল) পছন্দসই ফলাফলটি উত্পন্ন করে:

<রুট>
  <নোড />
</ রুট>

3
এটি দুর্দান্ত সমাধান হিসাবে দেখায়। জাভাস্ক্রিপ্টে এই রূপান্তরটি প্রয়োগ করার জন্য কোনও ক্রস ব্রাউজারের উপায় আছে কি? ভরসা করার মতো সার্ভার সাইড স্ক্রিপ্ট আমার কাছে নেই।
দারিন দিমিত্রভ

2
হ্যাঁ. সরিসা দেখুন: dev.abiss.gr/arissa এবং এখানে: xML.com/pub/a/2005/02/23/arissa.html
দিমিত্রে নোভাচায়েভ

6
@ এএলএমএফ: কী "কাজ করে না"? "ক্রোম" কী? এ জাতীয় এক্সএসএলটি প্রসেসরের কথা আমি কখনও শুনিনি। এছাড়াও, আপনার যদি উত্তরটির তারিখটি একবার দেখে থাকে তবে ক্রোম ব্রাউজারটি তখন অস্তিত্বহীন ছিল।
দিমিত্রে নোভাচেভ

3
@ এএলএমএফ: এছাড়াও নোট করুন যে এই প্রশ্নটি (এবং আমার উত্তরটি) হ'ল এইচটিএমএল নয়, স্ট্রিং (পাঠ্য) হিসাবে চমত্কার XML পাবে। আশ্চর্যের কিছু নেই যে এই ধরণের স্ট্রিং ব্রাউজারে প্রদর্শিত হয় না। অভিনব এইচটিএমএল আউটপুট (আলা আইআই এক্সএমএল প্রদর্শন) এর জন্য, এক্সপ্যাথ ভিজ্যুয়ালাইজারে ব্যবহৃত এক্সএসএলটি রূপান্তর দেখুন। আপনি এক্সপাথ ভিজ্যুয়ালাইজারটি এখানে ডাউনলোড করতে পারেন: huttar.net/dimitre/XPV/TopXML-XPV.html । আপনার কোডটি সামান্য সামঞ্জস্য করতে হবে (যেমন কোনও নোডকে ভেঙে ফেলার / প্রসারিত করার জন্য জাভাস্ক্রিপ্ট এক্সটেনশন ফাংশনগুলি সরিয়ে নেওয়া), তবে অন্যথায় ফলাফলটি এইচটিএমএলকে সূক্ষ্ম প্রদর্শন করা উচিত।
দিমিত্রে নোভাচেভ

2
জনকে, ২০০৮ সালে, যখন এই প্রশ্নের উত্তর দেওয়া হয়েছিল, তখন লোকেরা আইএস-তে জাভাস্ক্রিপ্ট থেকে এক্সএসএলটি রূপান্তর শুরু করছিল - এমএসএক্সএমএল 3 কে অনুরোধ করছে। এখন তারা এখনও এটি করতে পারে, যদিও আই এস 11 এর সাথে আসা এক্সএসএলটি প্রসেসরটি এমএসএক্সএমএল 6। অন্যান্য সমস্ত ব্রাউজারের একই রকম ক্ষমতা রয়েছে, যদিও তাদের মধ্যে বিল্ট-ইন এক্সএসএলটি প্রসেসর রয়েছে। এ কারণেই মূল প্রশ্নকারী কখনও এ জাতীয় প্রশ্ন উত্থাপন করেননি।
দিমিত্রে নোভাচেভ

32

ইফএনএক্স ক্ল্যাকক্ল্যাক্সের জাভাস্ক্রিপ্ট ফাংশনটির সামান্য পরিবর্তন। আমি ফাঁকা স্থান থেকে ট্যাবটিতে ফর্ম্যাটিংটি পরিবর্তন করেছি, তবে সর্বাধিক গুরুত্বপূর্ণ আমি পাঠ্যটিকে একটি লাইনে থাকতে দিয়েছি:

var formatXml = this.formatXml = function (xml) {
        var reg = /(>)\s*(<)(\/*)/g; // updated Mar 30, 2015
        var wsexp = / *(.*) +\n/g;
        var contexp = /(<.+>)(.+\n)/g;
        xml = xml.replace(reg, '$1\n$2$3').replace(wsexp, '$1\n').replace(contexp, '$1\n$2');
        var pad = 0;
        var formatted = '';
        var lines = xml.split('\n');
        var indent = 0;
        var lastType = 'other';
        // 4 types of tags - single, closing, opening, other (text, doctype, comment) - 4*4 = 16 transitions 
        var transitions = {
            'single->single': 0,
            'single->closing': -1,
            'single->opening': 0,
            'single->other': 0,
            'closing->single': 0,
            'closing->closing': -1,
            'closing->opening': 0,
            'closing->other': 0,
            'opening->single': 1,
            'opening->closing': 0,
            'opening->opening': 1,
            'opening->other': 1,
            'other->single': 0,
            'other->closing': -1,
            'other->opening': 0,
            'other->other': 0
        };

        for (var i = 0; i < lines.length; i++) {
            var ln = lines[i];

            // Luca Viggiani 2017-07-03: handle optional <?xml ... ?> declaration
            if (ln.match(/\s*<\?xml/)) {
                formatted += ln + "\n";
                continue;
            }
            // ---

            var single = Boolean(ln.match(/<.+\/>/)); // is this line a single tag? ex. <br />
            var closing = Boolean(ln.match(/<\/.+>/)); // is this a closing tag? ex. </a>
            var opening = Boolean(ln.match(/<[^!].*>/)); // is this even a tag (that's not <!something>)
            var type = single ? 'single' : closing ? 'closing' : opening ? 'opening' : 'other';
            var fromTo = lastType + '->' + type;
            lastType = type;
            var padding = '';

            indent += transitions[fromTo];
            for (var j = 0; j < indent; j++) {
                padding += '\t';
            }
            if (fromTo == 'opening->closing')
                formatted = formatted.substr(0, formatted.length - 1) + ln + '\n'; // substr removes line break (\n) from prev loop
            else
                formatted += padding + ln + '\n';
        }

        return formatted;
    };

আপনি নীচে চুয়ান মা এর মন্তব্য বিবেচনা করতে আপনার ফাংশন আপডেট করতে পারেন? আমার জন্য কাজ করেছেন। ধন্যবাদ। সম্পাদনা: আমি নিজেই এটি করেছি।
লুই

1
হাই, <?xml ... ?>এক্সএমএল পাঠ্যের শুরুতে
alচ্ছিক

31

@ দিমিত্রে নোভাচেভের উত্তরটি প্রসারিত করে তৃতীয় পক্ষের libs ছাড়াই দেশীয় জাভাস্ক্রিপ্ট সরঞ্জামগুলি ব্যবহার করে এটি করা যেতে পারে:

var prettifyXml = function(sourceXml)
{
    var xmlDoc = new DOMParser().parseFromString(sourceXml, 'application/xml');
    var xsltDoc = new DOMParser().parseFromString([
        // describes how we want to modify the XML - indent everything
        '<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">',
        '  <xsl:strip-space elements="*"/>',
        '  <xsl:template match="para[content-style][not(text())]">', // change to just text() to strip space in text nodes
        '    <xsl:value-of select="normalize-space(.)"/>',
        '  </xsl:template>',
        '  <xsl:template match="node()|@*">',
        '    <xsl:copy><xsl:apply-templates select="node()|@*"/></xsl:copy>',
        '  </xsl:template>',
        '  <xsl:output indent="yes"/>',
        '</xsl:stylesheet>',
    ].join('\n'), 'application/xml');

    var xsltProcessor = new XSLTProcessor();    
    xsltProcessor.importStylesheet(xsltDoc);
    var resultDoc = xsltProcessor.transformToDocument(xmlDoc);
    var resultXml = new XMLSerializer().serializeToString(resultDoc);
    return resultXml;
};

console.log(prettifyXml('<root><node/></root>'));

আউটপুট:

<root>
  <node/>
</root>

JSFiddle

দ্রষ্টব্য, @ jat255 দ্বারা চিহ্নিত হিসাবে, সুন্দর মুদ্রণ <xsl:output indent="yes"/>ফায়ারফক্স সমর্থন করে না। এটি কেবল ক্রোম, অপেরা এবং সম্ভবত বাকী ওয়েবকিট-ভিত্তিক ব্রাউজারগুলিতে কাজ করে বলে মনে হচ্ছে।


খুব সুন্দর উত্তর, তবে দুর্ভাগ্যক্রমে ইন্টারনেট এক্সপ্লোরারস আবার পার্টিটি বানিয়ে ফেলে।
ওয়ারুয়ামা

সুন্দর, এটি কেবল তখনই কাজ করে যখন ইনপুট এক্সএমএল একক লাইন হয় ... আপনি যদি প্রিটিফাইটি কল করার আগে পাঠ্য নোডগুলিতে মাল্টি লাইনগুলি সম্পর্কে চিন্তা না করেন তবে কল করুনprivate makeSingleLine(txt: string): string { let s = txt.trim().replace(new RegExp("\r", "g"), "\n"); let angles = ["<", ">"]; let empty = [" ", "\t", "\n"]; while (s.includes(" <") || s.includes("\t<") || s.includes("\n<") || s.includes("> ") || s.includes(">\t") || s.includes(">/n")) { angles.forEach(an => { empty.forEach(em => { s = s.replace(new RegExp(em + an, "g"), an); }); }); } return s.replace(new RegExp("\n", "g"), " "); }
সাশা বন্ড

5
আমি একটি ত্রুটি পেয়েছি, তবে ত্রুটির কোনও বার্তা নেই। ফায়ারফক্স ব্যবহার করে এটি ফিডলগুলিতেও ঘটে।
টোম জ্যাটো - মনিকা পুনরায় ইনস্টল করুন

এটি ফায়ারফক্সে ফাঁকা ত্রুটি নিয়ে আমার পক্ষে কাজ করছে না
jat255

1
এই সময়ে আলোচনা করা হয়: stackoverflow.com/questions/51989864/... দৃশ্যত, ফায়ারফক্স XSL জন্য একটি সংস্করণ স্পেসিফিকেশন প্রয়োজন, কিন্তু এটি কারণ মোজিলা বাস্তবায়ন কোনো সম্মান নেই যাহাই হউক না কেন ব্যাপার না xsl:output, ট্যাগ যাতে আপনি চমৎকার পাবেন না যাইহোক বিন্যাস।
jat255

19

ব্যক্তিগতভাবে, আমি এই ফাংশনটির সাথে গুগল-কোড-প্রিটিটিফাই ব্যবহার করি :

prettyPrintOne('<root><node1><root>', 'xml')

3
ওফস, আপনাকে এক্সএমএল এবং গুগল কোড-প্রিটিটিফাই করতে হবে কোডটি রঙিন করে। দুঃখিত।
টাভ

1
মত পরিধান সঙ্গে মনোরম মেশা stackoverflow.com/questions/139076/...
ক্রিস

3
এটি একটি ভাল কম্বোয়ের জন্য তৈরি ইনডেন্টেশনের জন্য কোড. google.com/p/vkbeautify এর সাথে মিলিত ।
Vdex

গুগল কোড থেকে গিথুব এ সরানো হয়েছে: নতুন লিঙ্ক: github.com /
mUser1990

18

যখন আমার অনুরূপ প্রয়োজন ছিল তখন এই থ্রেডটি পেয়েছি তবে আমি নীচের হিসাবে ওপি কোডটি সরলীকৃত করেছি:

function formatXml(xml, tab) { // tab = optional indent value, default is tab (\t)
    var formatted = '', indent= '';
    tab = tab || '\t';
    xml.split(/>\s*</).forEach(function(node) {
        if (node.match( /^\/\w/ )) indent = indent.substring(tab.length); // decrease indent by one 'tab'
        formatted += indent + '<' + node + '>\r\n';
        if (node.match( /^<?\w[^>]*[^\/]$/ )) indent += tab;              // increase indent
    });
    return formatted.substring(1, formatted.length-3);
}

আমার জন্য কাজ কর!


সেরা উত্তর !!
জিসি.সানাবরিয়া

8

অথবা আপনি যদি অন্য জেএস ফাংশনটি করতে চান তবে আমি ডারিনের (অনেক) পরিবর্তন করেছি:

var formatXml = this.formatXml = function (xml) {
    var reg = /(>)(<)(\/*)/g;
    var wsexp = / *(.*) +\n/g;
    var contexp = /(<.+>)(.+\n)/g;
    xml = xml.replace(reg, '$1\n$2$3').replace(wsexp, '$1\n').replace(contexp, '$1\n$2');
    var pad = 0;
    var formatted = '';
    var lines = xml.split('\n');
    var indent = 0;
    var lastType = 'other';
    // 4 types of tags - single, closing, opening, other (text, doctype, comment) - 4*4 = 16 transitions 
    var transitions = {
        'single->single'    : 0,
        'single->closing'   : -1,
        'single->opening'   : 0,
        'single->other'     : 0,
        'closing->single'   : 0,
        'closing->closing'  : -1,
        'closing->opening'  : 0,
        'closing->other'    : 0,
        'opening->single'   : 1,
        'opening->closing'  : 0, 
        'opening->opening'  : 1,
        'opening->other'    : 1,
        'other->single'     : 0,
        'other->closing'    : -1,
        'other->opening'    : 0,
        'other->other'      : 0
    };

    for (var i=0; i < lines.length; i++) {
        var ln = lines[i];
        var single = Boolean(ln.match(/<.+\/>/)); // is this line a single tag? ex. <br />
        var closing = Boolean(ln.match(/<\/.+>/)); // is this a closing tag? ex. </a>
        var opening = Boolean(ln.match(/<[^!].*>/)); // is this even a tag (that's not <!something>)
        var type = single ? 'single' : closing ? 'closing' : opening ? 'opening' : 'other';
        var fromTo = lastType + '->' + type;
        lastType = type;
        var padding = '';

        indent += transitions[fromTo];
        for (var j = 0; j < indent; j++) {
            padding += '    ';
        }

        formatted += padding + ln + '\n';
    }

    return formatted;
};

6

এখানে প্রদত্ত সমস্ত জাভাস্ক্রিপ্ট ফাংশন কোনও এক্সএমএল ডকুমেন্টের জন্য কাজ করবে না যা শেষ ট্যাগ '>' এবং প্রারম্ভ ট্যাগ '<' এর মধ্যে অনির্দিষ্ট শ্বেত স্পেস রয়েছে। এগুলি ঠিক করার জন্য, আপনাকে কেবলমাত্র কার্যগুলি প্রথম লাইনটি প্রতিস্থাপন করতে হবে

var reg = /(>)(<)(\/*)/g;

দ্বারা

var reg = /(>)\s*(<)(\/*)/g;

4

স্টাব নোড তৈরি করার বিষয়ে (ডকুমেন্ট.ক্রেটএলিমেন্ট ('ডিভ') - বা আপনার লাইব্রেরির সমতুল্য ব্যবহার করে), এটি এক্সএমএল স্ট্রিং দিয়ে পূরণ করুন (অভ্যন্তরীণ এইচটিএমএল মাধ্যমে) এবং মূল উপাদান / বা স্টাব উপাদানটির জন্য সাধারণ পুনরাবৃত্ত ফাংশন কল করার ক্ষেত্রে শিকড় নেই ফাংশনটি সমস্ত শিশু নোডের জন্য নিজেকে কল করে।

আপনি তখন পথে সিনট্যাক্স-হাইলাইট করতে পারতেন, নিশ্চিত হন যে মার্কআপটি সুগঠিত হয়েছে (ইনারএইচটিএমএল এর মাধ্যমে সংযোজন করার সময় ব্রাউজারের মাধ্যমে স্বয়ংক্রিয়ভাবে সম্পন্ন হয়েছে) ইত্যাদি It এটি এতটা কোড নাও হতে পারে এবং সম্ভবত এটি যথেষ্ট দ্রুত।


1
আশ্চর্যজনক, মার্জিত সমাধানের জন্য রূপরেখার মতো মনে হচ্ছে। কিভাবে একটি বাস্তবায়ন সম্পর্কে?
জনকে

4

আপনি যদি কোনও জাভাস্ক্রিপ্ট সমাধানের সন্ধান করছেন তবে কেবল প্রিটি ডিফ সরঞ্জাম থেকে কোডটি নিন http: // ব্যাখ্যাtydiff.com/?m=be সৌন্দর্য

আপনি এস প্যারামিটার ব্যবহার করে সরঞ্জামটিতে ফাইলগুলি প্রেরণ করতে পারেন, যেমন: http : // ব্যাখ্যাtydiff.com/?m=beautify&s=https://stackoverflow.com/


পার্লিডিফ একটি বাস্তব সুন্দর সরঞ্জাম। ব্যবহারের জন্য এখানে আরও কিছু তথ্য দেওয়া হয়েছে: stackoverflow.com/questions/19822460/ ব্যাখ্যাtydd
বব

2
var formatXml = this.formatXml = function (xml) {
        var reg = /(>)(<)(\/*)/g;
        var wsexp = / *(.*) +\n/g;
        var contexp = /(<.+>)(.+\n)/g;
        xml = xml.replace(reg, '$1\n$2$3').replace(wsexp, '$1\n').replace(contexp, '$1\n$2');
        var pad = 0;
        var formatted = '';
        var lines = xml.split('\n');
        var indent = 0;
        var lastType = 'other';

এই দুর্বল গঠনের উত্তরের সাথে লড়াই করার পরে, আমি এটি কাজ করেছিলাম, আমি মনে করি - ফলাফলগুলি খুব সুন্দর নয়: কোনও ইন্ডেন্টেশন নয়।
জনকে

2
Or just print out the special HTML characters?

Ex: <xmlstuff>&#10; &#09;<node />&#10;</xmlstuff>   


&#09;   Horizontal tab  
&#10;   Line feed

2

এক্সএমএলস্পেক্ট্রামটি ফর্ম্যাট করে এক্সএমএল, অ্যাট্রিবিউট ইনডেন্টেশন সমর্থন করে এবং এক্সএমএল এবং কোনও এমবেডেড এক্সপাথ এক্সপ্রেশনগুলির জন্য সিনট্যাক্স-হাইলাইটিংও করে:

এক্সএমএলস্পেক্ট্রামটি এক্সএমএল ফর্ম্যাটেড

এক্সএমএলস্পেক্ট্রামটি একটি ওপেন সোর্স প্রকল্প, এক্সএসএলটি ২.০ এ কোডড - যাতে আপনি স্যাকসন-সিই (সুপারিশকৃত) বা স্যাকসন-সিই ব্যবহার করে ক্লায়েন্ট-সাইডের মতো প্রসেসরের সাহায্যে এই সার্ভার-সাইডটি চালাতে পারেন।

এক্সএমএলস্পেক্ট্রামটি ব্রাউজারে চালানোর জন্য এখনও অনুকূলিত হয়নি - সুতরাং এই সার্ভার-সাইডটি চালানোর জন্য সুপারিশ করা হয়েছে।


2

সুন্দর মুদ্রণের জন্য উপরের পদ্ধতিটি ব্যবহার করুন এবং তারপরে jquery পাঠ্য () পদ্ধতিটি ব্যবহার করে কোনও ডিভিতে এটি যুক্ত করুন । উদাহরণস্বরূপ ডিভের আইডি এর xmldivপরে ব্যবহার করুন:

$("#xmldiv").text(formatXml(youXmlString));


2
কি "সুন্দর মুদ্রণের জন্য উপরের পদ্ধতি"?
জেডাব্লু লিম

2

এখানে এক্সএমএল ফর্ম্যাট করার জন্য অন্য ফাংশন

function formatXml(xml){
    var out = "";
    var tab = "    ";
    var indent = 0;
    var inClosingTag=false;
    var dent=function(no){
        out += "\n";
        for(var i=0; i < no; i++)
            out+=tab;
    }


    for (var i=0; i < xml.length; i++) {
        var c = xml.charAt(i);
        if(c=='<'){
            // handle </
            if(xml.charAt(i+1) == '/'){
                inClosingTag = true;
                dent(--indent);
            }
            out+=c;
        }else if(c=='>'){
            out+=c;
            // handle />
            if(xml.charAt(i-1) == '/'){
                out+="\n";
                //dent(--indent)
            }else{
              if(!inClosingTag)
                dent(++indent);
              else{
                out+="\n";
                inClosingTag=false;
              }
            }
        }else{
          out+=c;
        }
    }
    return out;
}

2

আপনি এক্সএমএল- বিউটিফায়ার সহ চমত্কার ফর্ম্যাট xML পেতে পারেন

var prettyXmlText = new XmlBeautify().beautify(xmlText, 
                    {indent: "  ",useSelfClosingElement: true});

সংভৃতক : সাদা স্পেসের মতো ইনডেন্ট প্যাটার্ন

useSelfClosingElement : সত্য => খালি উপাদান থাকা অবস্থায় স্ব- উপাদানটি ব্যবহার করুন।

JSFiddle

মূল (আগে)

<?xml version="1.0" encoding="utf-8"?><example version="2.0">
  <head><title>Original aTitle</title></head>
  <body info="none" ></body>
</example>

সুশোভিত (পরে)

<?xml version="1.0" encoding="utf-8"?>
<example version="2.0">
  <head>
    <title>Original aTitle</title>
  </head>
  <body info="none" />
</example>

1
var reg = /(>)\s*(<)(\/*)/g;
xml = xml.replace(/\r|\n/g, ''); //deleting already existing whitespaces
xml = xml.replace(reg, '$1\r\n$2$3');

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.