格式化XML输出

本文介绍了一种使用MSXML的SAX接口来格式化XML文件的方法,使得原本仅面向机器的XML文档更易于人类阅读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

虽然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保存的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值