如何在javascript中打印漂亮的xml?

如何在javascript中打印漂亮的xml?,javascript,xml,pretty-print,Javascript,Xml,Pretty Print,用JavaScript打印xml的最佳方法是什么?我通过ajax调用获取xml内容,在文本区域中显示此请求之前,我想对其进行格式化,使其看起来好看:)这不是最好的方法,但您可以将xml作为文本获取,并使用RegExp根据节点和特征线的深度查找“>”并将其替换为选项卡,但我对RegExp不是很了解哦,对不起 您还可以使用XSLT并使用javascript对其进行转换。 检查并查看。这不考虑任何缩进,但有助于对XML进行编码,以便在或标记中使用: /* hack to encode HTML ent

用JavaScript打印xml的最佳方法是什么?我通过ajax调用获取xml内容,在文本区域中显示此请求之前,我想对其进行格式化,使其看起来好看:)

这不是最好的方法,但您可以将xml作为文本获取,并使用RegExp根据节点和特征线的深度查找“>”并将其替换为选项卡,但我对RegExp不是很了解哦,对不起

您还可以使用XSLT并使用javascript对其进行转换。

检查并查看。

这不考虑任何缩进,但有助于对XML进行编码,以便在
标记中使用:

/* hack to encode HTML entities */
var d = document.createElement('div'); 
var t = document.createTextNode(myXml); 
d.appendChild(t);
document.write('<pre>' + d.innerHTML + '</pre>');
<c:out value="<strong>text</strong>"/>
/*对HTML实体进行编码的黑客攻击*/
var d=document.createElement('div');
var t=document.createTextNode(myXml);
d、 儿童(t);
document.write(“”+d.innerHTML+“”);

如果您不想使用
,而是希望高亮显示,并且节点可以折叠/展开,那么请参见超级用户。

我同意Arjan使用
标记。大约两天前,我尝试破解html输出中“丑陋”的xml代码。让生活更轻松,让你保持理智

使用prettydiff.com/markup\u beauty.js。这能够支持无效的标记、片段和JSTL代码


您可以在上使用web工具演示该应用程序。只需选择“美化”和“标记”选项


重要的是要使用适当的工具来美化XML,不要随意匆忙地完成这项工作。否则,您将在不需要的地方添加空白标记,并在需要的地方删除它们。对于原始数据来说,这可能是重要的,但对于人类可消费的内容来说,这会破坏代码的完整性,尤其是在递归方面。

请看一下vkBeautify.js插件

这正是你需要的。
它是用纯javascript编写的,缩小了不到1.5K,速度非常快:所需时间不到5毫秒。处理50K XML文本。

这里有一个小型的自包含式美化工具,适用于大多数情况,它可以很好地对长线进行缩进,并在需要时对输出进行着色

函数formatXml(xml、着色、缩进){
函数esc(s){返回s.replace(/[-\/&]/g,函数(c){//转义特殊字符
返回c=''?'':&#'+c.charCodeAt(0)+';'})}
变量sm='',se='',sd='',
sa=“”,tb=“”,tc=“”,
id=缩进,sz=tz='',re=is='',ib,ob,at,i;
如果(!colorize)sm=se=sd=sa=sz='';

xml.slice(1,-1).split(/>\s*(*)使xml看起来好看将是一个魔术!好吧,我不确定我们不能没有答案,即使它是一条评论,但好吧…现在删除它也可能清除投票,所以等到你至少有60个声誉时再说。:-)现在几年过去了,我想应该删除它;-)(考虑到它的年龄,如果我理解正确的话,你会保持声誉。)你应该将它作为一个合适的模块发布到npm-我很乐意使用它。它在npm上:;请参阅此支持选项卡的文档?抱歉,我不确定我是否理解这个问题,请澄清?
function formatXml(xml,colorize,indent) { 
  function esc(s){return s.replace(/[-\/&<> ]/g,function(c){          // Escape special chars
    return c==' '?'&nbsp;':'&#'+c.charCodeAt(0)+';';});}            
  var sm='<div id="xmt">',se='<div id="xel">',sd='<div id="xdt">',
      sa='<div id="xat">',tb='<div id="xtb">',tc='<div id="xtc">',
      id=indent||'  ',sz=tz='</div>',re=is='',ib,ob,at,i;
  if (!colorize) sm=se=sd=sa=sz='';   
  xml.slice(1,-1).split(/>\s*</).forEach(function(nd){
    ob=('<'+nd+'>').match(/^(<[!?\/]?)(.*?)([?\/]?>)$/);              // Split outer brackets
    ib=ob[2].match(/^(.*?)>(.*)<\/(.*)$/)||['',ob[2],''];             // Split inner brackets 
    at=ib[1].match(/^--.*--$|=|('|").*?\1|[^\t\n\f \/>"'=]+/g)||['']; // Split attributes
    if (ob[1]=='</') is=is.substring(id.length);                      // Decrease indent
    re+=tb+tc+esc(is)+tz+tc+sm+esc(ob[1])+sz+se+esc(at[0])+sz;
    for (i=1;i<at.length;i++) re+=(at[i]=="="?sm+"="+sz+sd+esc(at[++i]):sa+' '+at[i])+sz;
    re+=ib[2]?sm+esc('>')+sz+sd+esc(ib[2])+sz+sm+esc('</')+sz+se+ib[3]+sz:'';
    re+=sm+esc(ob[3])+sz+tz+tz;
    if (ob[1]+ob[3]+ib[2]=='<>') is+=id;                              // Increase indent
  });
  return re;
}