擅长:python、mysql、java
<p>sax解析器本身应该为内容处理程序提供定位器。定位器必须实现某些方法,但它可以是任何对象,只要它有正确的方法。<a href="http://docs.python.org/2/library/xml.sax.reader.html#locator-objects" rel="nofollow">^{<cd1>} class</a>是定位器应该实现的<em>接口</em>;如果解析器向处理程序提供了一个locator对象,那么就可以指望定位器上存在这4个方法了。在</p>
<p>解析器只鼓励<em>设置定位器,不需要这样做。expat-XML解析器确实提供了它。在</p>
<p>如果您子类<a href="http://docs.python.org/2/library/xml.sax.handler.html#contenthandler-objects" rel="nofollow">^{<cd2>}</a>,那么它将为您提供一个标准的<code>setDocumentHandler()</code>方法,并且在调用处理程序上的<code>.startDocument()</code>时,您的内容处理程序实例将设置<code>self._locator</code>:</p>
<pre><code>from xml.sax.handler import ContentHandler
class MyContentHandler(ContentHandler):
def __init__(self):
ContentHandler.__init__(self)
# initialize your handler
def startElement(self, name, attrs):
loc = self._locator
if loc is not None:
line, col = loc.getLineNumber(), loc.getColumnNumber()
else:
line, col = 'unknown', 'unknown'
print 'start of {} element at line {}, column {}'.format(name, line, col)
</code></pre>