在JavaScript中以最佳方式漂亮地打印XML,你需要通过ajax调用获取XML内容,并且在将其显示在文本区域之前,您需要对其进行格式化,使其更容易阅读。
在JavaScript中以最佳方式漂亮地打印XML,你需要通过ajax调用获取XML内容,并且在将其显示在文本区域之前,您需要对其进行格式化,使其更容易阅读。
这个功能并不考虑缩进,但能帮助编码XML供在<pre>
或<textarea>
标签中使用:
/* hack to encode HTML entities */
var d = document.createElement('div');
var t = document.createTextNode(myXml);
d.appendChild(t);
document.write('<pre>' + d.innerHTML + '</pre>');
如果您想要高亮显示并可折叠/展开节点,而不是使用<textarea>
,请参见Super User上的在Chrome浏览器中显示XML。
请看vkBeautify.js插件。
http://www.eslinstructor.net/vkbeautify/
这正是您需要的。它用普通JavaScript编写,压缩后不到1.5K,并且非常快速:处理50K XML文本只需不到5毫秒。
function formatXml(xml,colorize,indent) {
function esc(s){return s.replace(/[-\/&<> ]/g,function(c){ // Escape special chars
return c==' '?' ':'&#'+c.charCodeAt(0)+';';});}
var sm='<div class="xmt">',se='<div class="xel">',sd='<div class="xdt">',
sa='<div class="xat">',tb='<div class="xtb">',tc='<div class="xtc">',
ind=indent||' ',sz='</div>',tz='</div>',re='',is='',ib,ob,at,i;
if (!colorize) sm=se=sd=sa=sz='';
xml.match(/(?<=<).*(?=>)|$/s)[0].split(/>\s*</).forEach(function(nd){
ob=('<'+nd+'>').match(/^(<[!?\/]?)(.*?)([?\/]?>)$/s); // Split outer brackets
ib=ob[2].match(/^(.*?)>(.*)<\/(.*)$/s)||['',ob[2],'']; // Split inner brackets
at=ib[1].match(/^--.*--$|=|('|").*?\1|[^\t\n\f \/>"'=]+/g)||['']; // Split attributes
if (ob[1]=='</') is=is.substring(ind.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+=ind; // Increase indent
});
return re;
}
查看演示,请访问https://jsfiddle.net/dkb0La16/
我同意Arjan的观点,应该使用<pre>
标签。在两天前,我尝试在我的html输出中解密“丑陋”的xml代码,然后才尝试了这个方法。这让生活变得更加容易,也保持了你的理智。
<c:out value="<strong>text</strong>"/>
您可以使用prettydiff.com上的Web工具演示该应用程序。只需选择“美化”和“标记”选项。
重要的是您使用适当的工具来美化您的XML,而不是随意地匆忙完成工作。否则,您将在不打算添加它们的位置添加空格标记,并在打算添加它们的位置删除它们。对于原始数据,这可能是有影响的,但对于人类可消费的内容,这会破坏您的代码完整性,特别是涉及递归的部分。