用javascript打印XML

我有一个字符串,它表示我想要打印的非缩进XML。例如:

<根&gt&书信电报;节点/&gt&lt/根>

应成为:

<根>
<节点/>
&lt/根>

语法突出显示不是一项要求。为了解决这个问题,我首先转换XML以添加回车符和空格,然后使用pre标记输出XML。为了添加新行和空格,我编写了以下函数:

函数格式xml(xml){
var格式=“”;
var reg=/(>)(<)(\/*)/g;
xml=xml.replace(reg,’$1\r\n$2$3’);
var-pad=0;
jQuery.each(xml.split(’\r\n’),函数(索引,节点){
var缩进=0;
if(node.match(/.+<\/\w[^>]*>$/)){
缩进=0;
}else if(node.match(/^<\/\w/)){
如果(pad!=0){
pad-=1;
}
}else if(node.match(/^<\w[^>]*[^\/]>*$/)){
缩进=1;
}否则{
缩进=0;
}
变量填充=“”;
对于(变量i=0;i<pad;i++){
填充+=”;
}
格式化+=填充+节点+’\r\n’;
pad+=缩进;
});
返回格式;
}

然后我像这样调用函数:

jQuery('pre.formatted xml').text(formattxml('lt;root><node1/></root>');

这对我来说非常好,但是当我编写上一个函数时,我认为一定有更好的方法。所以我的问题是,您知道有什么更好的方法可以让XML字符串在html页面中漂亮地打印出来吗?欢迎使用任何javascript框架和/或插件来完成这项工作。我唯一的要求是在客户端完成

从问题的文本中,我得到的印象是,与HTML格式的结果相反,应该是字符串结果

如果是这样,实现这一点的最简单方法是使用身份转换和<xsl:output indent=“yes”/&gt说明

<xsl:stylesheet version=“1.0”
xmlns:xsl=”http://www.w3.org/1999/XSL/Transform">
<xsl:output-ommit-xml-declaration=“yes”indent=“yes”/
<xsl:template match=“node()|@*”>
<xsl:copy>
<xsl:apply templates select=“node()|@*”/>
&lt/xsl:copy>
&lt/xsl:template>
&lt/xsl:stylesheet>

在提供的XML文档上应用此转换时:

<根><节点/>&lt/根>

大多数XSLT处理器(.NET XslCompiledTransform,Saxon 6.5.4和Saxon 9.0.0.2,AltovaXML)产生所需的结果:

<根>
<节点/>
&lt/根>

发表评论