对解析字符串形式xml的思考

有一个字符串,这个字符串是xml格式,怎么解析它最好呢?

当然是针对稍微大一点的xml字符串而言,如果都是一点点,那不管用什么工具解析,效率不会有太大区别。

内存的使用方面:

虽然字符串已经加载到内存中了,但是如果被xml解析器解析的话,解析器还是会再加载自己的单独一份内存,故而流的解析方式是最省内存的。

解析耗时方面:

因为字符串是已经被加载到内存中了,所以能对字符串直接进行解析是最快的,但是可惜的是到目前为止我还没有发现哪个xml解析器会直接解析xml格式的字符串,他们都是把字符串重新加载为一个InputStream,然后进入和解析文档同一入口的解析流程。
值得一提的是dom4j提供了一个parseText(String s)方法,返回Document,但是打开源码不难发现,那只是一个假象。附上dom4j源码方法:

public static Document parseText(String text) throws DocumentException {
Document result = null;

SAXReader reader = new SAXReader();
String encoding = getEncoding(text);

InputSource source = new InputSource(new StringReader(text));
source.setEncoding(encoding);

result = reader.read(source);

// if the XML parser doesn't provide a way to retrieve the encoding,
// specify it manually
if (result.getXMLEncoding() == null) {
result.setXMLEncoding(encoding);
}

return result;
}


所以既然大家都是解析一个InputStream,那当然是SAX或者StAX这种解析xml流的方式最快了效率最高最省内存了。

最后,我认为一般以字符串形式呈现的xml,应该都很小,那么用什么方式去解析如果对性能不是特别苛刻的话,可以不考虑,用户感知不到并且体验良好就是王道。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值