我有一个字符串,它表示我想要打印的非缩进XML。例如:
<;根>&书信电报;节点/></根>;
应成为:
<;根>;
<;节点/>;
</根>;
语法突出显示不是一项要求。为了解决这个问题,我首先转换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”/>说明:
<;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()|@*”/> </xsl:copy> </xsl:template> </xsl:stylesheet>
在提供的XML文档上应用此转换时:
<;根><;节点/></根>
大多数XSLT处理器(.NET XslCompiledTransform,Saxon 6.5.4和Saxon 9.0.0.2,AltovaXML)产生所需的结果:
<;根> <;节点/> </根>