只读取XML根元素
在很多基于REST的API调用中,我们会遇到一个叫做nextURL的参数,利用这个参数我们可以查询下一个网址。这个参数通常在根元素中(或者可能在下一个元素中)。
大家一般是怎么处理这个的呢?如果你使用标准的XML解析器,它会读取并加载整个XML文件,然后你才能通过getElementsByTag来获取nextURL。有没有更好的方法呢?读取整个XML显然是浪费时间和内存。
补充:一个示例XML可能是这样的
<result pubisher="xyz" nextURL="http://actualurl?since_date=<newdate>">
<element>adfsaf</element>
..
</result>
我需要在不读取整个XML的情况下获取新的since_date。
2 个回答
0
“标准XML解析器”这个词涵盖的内容非常广泛,所以我觉得很难对它们的行为进行概括。例如,标准的DOM解析器是基于树的,它会把整个XML文件读入内存中;而SAX解析器(我想StAX也是这样)则不会,它会根据应用程序的需要逐步读取数据。听起来你需要的就是后者,也就是SAX或StAX解析器。
编辑:请务必查看KitsuneYMG在下面的评论,了解SAX和StAX之间的行为区别。
3
Python:你可以使用ElementTree的iterparse方法……前提是你想要的数据在一个属性里,这样在你收到开始事件的时候,数据就已经被解析好了。如果数据在元素的文本或尾部,你就得等到结束事件才能获取。建议你修改一下你的提问,展示一下你的XML长什么样,并用一个例子来解释“或者也许在下一个元素里”的意思。