我阅读了一些关于XML解析器的文章,并且遇到了SAX和DOM.
SAX是基于事件的,DOM是树模型 - 我不理解这些概念之间的差异.
根据我的理解,基于事件意味着某种事件发生在节点上.就像当单击特定节点时,它将给出所有子节点,而不是同时加载所有节点.但是在DOM解析的情况下,它将加载所有节点并创建树模型.
我的理解是否正确?
请纠正我如果我错了或以更简单的方式向我解释基于事件和树模型.
我试图找出python lxml api,但遇到了一个特殊的问题.我安装了以下库版本:
当我运行以下代码时:
html = open('file.html', 'r')
context = etree.iterparse(StringIO(html), events=("start", "end"), html='true')
for event, element in context:
#do stuff
Run Code Online (Sandbox Code Playgroud)
事实证明这是一个解析错误.我将html移动到一个文件(如下所示)
<html>
<head></head>
<body>
<table>
<tr>
<td>image</td>
<a href="relative.phtml?with=querystring&blah=blah">blah\n(blah)</a></td>
<td> 35 </td>
<td> 28 </td>
<td><b>-7</b></td>
<td>
23,000 </td>
<td> 373,000 </td>
<td> 644,000 </td>
<td>+72.65%</td>
</tr>
<tr>
<td>image</td>
<td><a href="relative.phtml?with=querystring&blah=blah">blah\n(blah)</a></td>
<td> 35 </td>
<td> 28 </td>
<td><b>-7</b></td>
<td>
23,000 </td>
<td> 373,000 </td>
<td> 644,000 </td>
<td>+72.65%</td>
</tr>
</table>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我现在收到这个错误:
对于事件,元素在上下文中:
在lxml.etree.iterparse中输入"iterparse.pxi",第515行.下一个 …