`
bleet
  • 浏览: 59807 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

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,应该都很小,那么用什么方式去解析如果对性能不是特别苛刻的话,可以不考虑,用户感知不到并且体验良好就是王道。
分享到:
评论

相关推荐

    Java机试相关题目34题

    4. String与StringBuffer的转换:字符串的不可变性使得每次对字符串的修改都会生成新的字符串对象,而StringBuffer是一个可变的字符序列。本题目要求使用STRING构造一个动态字符串,然后修改为StringBuffer类型,以...

    .net性能优化宝典

    对字符串进行大小写转换时,如果没有必要,请避免使用`ToUpper`或`ToLower`方法,因为这些方法也会创建新的字符串对象。 **1.2.3 最快的空串比较方法** 对于空字符串的比较,使用`string.IsNullOrEmpty`或`string....

    php 获取百度的热词数据的代码

    将HTML字符串转换为有效的XML格式,以便于使用 `simplexml_load_string` 进行解析: ```php $templateRss = "<?xml version=\"1.0\" encoding=\"GBK\"?>". $templateRss; $xml = simplexml_load_string($...

    2021-2022计算机二级等级考试试题及答案No.14246.docx

    - 数值类型与字符串连接时会先转换为字符串形式。 **题目解析:** - 本题考察Java程序的输出结果。 - 正确答案为`A.java2`。 ### 21. 永久关系 **知识点概述:** - **永久关系**: - 数据库中表之间的关联。 - ...

    二级考试要求 java c c++ ser

    1. **常用数据结构**:考生需要熟悉并能够灵活运用字符串、数组、链表、队列、栈、二叉树等基本数据结构。 2. **指针操作**:理解指针的概念及其在内存管理中的应用,包括内存的申请和释放。 3. **函数指针与回调**...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    字符串常用操作 字典的使用 三级菜单实例 本周作业-购物车优化 第3周 作业 上节内容回顾 集合及其运算 文件读与写详解 心灵鸡汤 文件修改详解 字符编码转换详解 函数与函数式编程 函数式编程之参数详解 局部变量与...

    Python实现抓取城市的PM2.5浓度和排名

    最后,文章还展示了如何利用Python的print函数和格式化字符串来输出抓取的数据和时间戳,以及如何通过条件语句和注释来控制程序的运行逻辑。 整体上,文章通过一个具体的应用案例,向读者展示了如何使用Python语言...

    Entity Framework 详解

    - **字符串函数**:提供了多种字符串处理函数。 - **数字函数**:支持数学计算相关的函数。 - **时间函数**:支持日期时间相关的函数。 - **GUID**:支持GUID类型的查询。 - **位计算函数**:支持位操作相关的函数。...

Global site tag (gtag.js) - Google Analytics