1
Livid MOD 没有提供分页参数么?
|
3
yorkw 2014-07-21 15:47:13 +08:00 1
|
4
tabris17 2014-07-21 15:50:21 +08:00
自己写一个XMLParser
|
5
keithellis 2014-07-21 16:03:45 +08:00 2
SAX parser
|
6
feiyuanqiu 2014-07-21 16:08:31 +08:00 1
PHP的话,可以用XMLReader这个扩展,它是按照文件流的方式每次按照节点来读取,读完一个节点再读下一个,不会把文件整个载入内存,php5.1以上都是自带了的,直接可以用。
|
7
andybest OP @keithellis SAX (Simple API for XML) parser 不是在初始化的时候一次将XML全部装入内存的吗?如何能解决这个问题呢?
|
10
keithellis 2014-07-21 16:26:13 +08:00 2
|
11
bigredapple 2014-07-21 16:28:39 +08:00 1
SAX
|
12
andybest OP @keithellis Very useful !收藏了,十分感谢!
|
13
kaneg 2014-07-21 16:32:08 +08:00 1
如果你使用Java,基于事件的流式处理方式应该更适合你。示例代码:
try { URL url = new URL("http://www.meituan.com/api/v2/beijing/deals"); URLConnection connection = url.openConnection(); connection.setConnectTimeout(5000); connection.setReadTimeout(60000); InputStream is = connection.getInputStream(); try { XMLInputFactory factory = XMLInputFactory.newInstance(); XMLEventReader xmlEventReader = factory.createXMLEventReader(new BufferedInputStream(is)); while (xmlEventReader.hasNext()) { XMLEvent xmlEvent = xmlEventReader.nextEvent(); if (xmlEvent.isStartElement()) { StartElement startElement = xmlEvent.asStartElement(); System.out.println(startElement.getName().getLocalPart()); } } } catch (Exception e) { System.err.println(e.getMessage()); } } catch (IOException e) { System.err.println(e.getMessage()); } |
14
xujialiang 2014-07-21 16:46:29 +08:00
IOS中,document方式会一次把xml全部读进内存的。
|
15
Zhang 2014-07-21 16:52:25 +08:00
加载完了,浏览器耗了4.42GB内存
|
17
fanghui 2014-07-21 17:17:07 +08:00
笨方法:下载--保存文件--分文件--解析文件---
|
20
ChiChou 2014-07-21 17:48:04 +08:00
pull 比较适合这个场景。
|
22
yangxiongwei 2014-07-21 19:29:02 +08:00 1
SAX ,事件驱动。当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。优点:不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载。缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少;
|
24
yangxiongwei 2014-07-21 21:54:38 +08:00
|
26
arslion 2014-07-22 10:16:34 +08:00
只读的话用SAX呗~~
|