格式化XML输出

来源:互联网 发布:淘宝主播吴小白 编辑:程序博客网 时间:2024/05/22 03:26

虽然XML设计的初衷是为了方便机器之间的交互(interoperability),而需要满足机器可阅读(machine readable)的特性。然而,由于程序员为了方便开发,既然XML是通过文本表示的,不如再强化一些,做到人类可阅读(human readable)吧。XML究竟是哪种可阅读的讨论已经是老生常谈了,这里不会深入探讨,只是借助这个机会介绍一些方便的格式化XML的方法,与大家共享。

借助MSXML的SAX接口

SAX虽然不是W3C的规范,然而XML社区仍然发扬光大了这种流推送的编程模型,并且广为流传。MSXML也支持SAX(这里特指SAX2)接口,而且SAX Writer还支持indent属性,显然,可以通过SAX Reader读取并送到SAX Writer进行格式化输出的目的。源代码如下:

var oArgs = WScript.Arguments;if (oArgs.length != 1) {  WScript.Echo("Usage: cscript saxpretty.js [input xml]");  WScript.Quit();}input = oArgs(0);var reader = new ActiveXObject("Msxml2.SAXXMLReader.6.0");var writer = new ActiveXObject("Msxml2.MXXMLWriter.6.0");try {  writer.encoding = "utf-8";  writer.omitXMLDeclaration = false;  writer.standalone = true;  writer.indent = true;  reader.contentHandler = writer;  reader.errorHandler = writer;  reader.putProperty("http://xml.org/sax/properties/lexical-handler", writer);  reader.putProperty("http://xml.org/sax/properties/declaration-handler", writer);  reader.parseURL(input);  WScript.Echo(writer.output);} catch(e) {  WScript.Echo(e.description);}

比如输入文件是:

<?xml version="1.0" encoding="iso-8859-1"?><tag><nested>hello</nested></tag>

那么输出文件是:

<?xml version="1.0" standalone="yes"?><tag>    <nested>hello</nested></tag>

虽然输入XML文件制定了编码,由于完全通过MSXML操作,SAX会打理好一切,所以输出文件中不需要指定编码,比如在JavaScript中就是以UTF-16保存的。

原创粉丝点击