在JavaScript中打印xml的最佳方法是什么?我通过ajax调用获取xml内容,然后在textarea中显示此请求之前我想格式化它以使它看起来很好看:)
答案 0 :(得分:5)
这不会处理任何缩进,但有助于对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>
,请在超级用户上查看Displaying XML in Chrome Browser。
答案 1 :(得分:5)
看一下 vkBeautify.js 插件
http://www.eslinstructor.net/vkbeautify/
这正是你所需要的。 它用简单的javascript编写,小于1.5K缩小并且非常快:花费不到5毫秒。处理50K XML文本。
答案 2 :(得分:2)
我同意Arjan使用<pre>
标签。我试图在我的html输出中破译'丑陋的'xml代码,然后我在大约2天前尝试了这个。让生活更轻松,让您保持理智。
答案 3 :(得分:1)
这不是最好的方法,但你可以将xml作为文本并使用RegExp来查找和替换'&gt;'对于根据节点深度和断裂线的标签,但我真的不太了解RegExp,对不起。
您也可以使用XSLT并使用javascript对其进行转换 查看this link并查看this tutorial。
答案 4 :(得分:1)
使用prettydiff.com/markup_beauty.js。这能够支持无效标记,片段和JSTL代码。
<c:out value="<strong>text</strong>"/>
您可以使用prettydiff.com上的网络工具演示该应用程序。只需选择“美化”和“标记”选项。
使用适当的工具来美化XML并且不要随意匆忙地完成工作是很重要的。否则,您将添加不在意图的空白标记,并将其移除到预期位置。对于原始数据,这可能是重要的,但对于人类可消费内容,这会破坏代码的完整性,尤其是在递归方面。
答案 5 :(得分:1)
这是一个小型自包含美化器,适用于大多数情况,可以很好地缩进长行,并在需要时为输出着色。
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 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;
}