classification
Title: Documentation of xml.sax.xmlreader: Locator.getLineNumber() and Locator.getColumnNumber()
Type: behavior Stage: resolved
Components: Documentation, XML Versions: Python 3.6, Python 3.5, Python 2.7
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: docs@python Nosy List: BreamoreBoy, christian.heimes, docs@python, emilyemorehouse, patrick.vrijlandt, python-dev, r.david.murray
Priority: normal Keywords: patch

Created on 2012-01-14 12:02 by patrick.vrijlandt, last changed 2016-06-02 19:22 by python-dev. This issue is now closed.

Files
File name Uploaded Description Edit
13784.patch emilyemorehouse, 2016-06-02 18:54 review
Messages (5)
msg151247 - (view) Author: patrick vrijlandt (patrick.vrijlandt) Date: 2012-01-14 12:02
Problem:
Locator methods return the location where the event starts, not where it ends.
Locator line numbers start at 1, Locator column numbers can be 0.

Proposal:
Adapt documentation.

From the docs:
Instances of Locator provide these methods:

Locator.getColumnNumber() 
Return the column number where the current event ends.

Locator.getLineNumber() 
Return the line number where the current event ends

My Test:

import xml.sax

data = b"""<main>
    <sub
        attr="1"
        id="name"
        >
        <subsub />
    </sub>
</main>"""


class MyHandler(xml.sax.handler.ContentHandler):

    def startElement(self, name, attrs):
        if name == "sub":
            print("open", name, self._locator.getLineNumber(), self._locator.getColumnNumber())
            
    def endElement(self, name):
        if name == "sub":
            print("close", name, self._locator.getLineNumber(), self._locator.getColumnNumber())

xml.sax.parseString(data, MyHandler())

Output:

open sub 2 4
close sub 7 4
msg222156 - (view) Author: Mark Lawrence (BreamoreBoy) * Date: 2014-07-03 08:17
@patrick please accept our apologies for the delay in getting back to you.
msg266913 - (view) Author: Emily Morehouse (emilyemorehouse) * (Python committer) Date: 2016-06-02 18:54
The reported behavior has been verified -- the documented behavior is indeed incorrect for both Locator.getColumnNumber() and Locator.getLineNumber(). The beginning line and column numbers are returned, not the end.

This has been tested and verified for Python 2.7, Python 3.5.1 and a local build of the current default branch.
msg266924 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2016-06-02 19:19
Thanks Emily.  For some reason the auto update of the tracker doesn't seem to have worked.  Maybe it is just delayed, but in case, the commit hashes are 2.7 97b76fe183f4, 3.5 9d6a9e2ae18b, and 3.6 cce04851d2e2.
msg266927 - (view) Author: Roundup Robot (python-dev) (Python triager) Date: 2016-06-02 19:22
New changeset 97b76fe183f4 by R David Murray in branch '2.7':
#13784: fix xml.sax.reader getColumn/LineNumber docs.
https://hg.python.org/cpython/rev/97b76fe183f4

New changeset 9d6a9e2ae18b by R David Murray in branch '3.5':
#13784: fix xml.sax.reader getColumn/LineNumber docs.
https://hg.python.org/cpython/rev/9d6a9e2ae18b

New changeset cce04851d2e2 by R David Murray in branch 'default':
Merge: #13784: fix xml.sax.reader getColumn/LineNumber docs.
https://hg.python.org/cpython/rev/cce04851d2e2
History
Date User Action Args
2016-06-02 19:22:36python-devsetnosy: + python-dev
messages: + msg266927
2016-06-02 19:19:33r.david.murraysetstatus: open -> closed

versions: - Python 3.2, Python 3.3, Python 3.4
nosy: + r.david.murray

messages: + msg266924
resolution: fixed
stage: resolved
2016-06-02 18:54:05emilyemorehousesetfiles: + 13784.patch
versions: + Python 2.7, Python 3.2, Python 3.3, Python 3.6
nosy: + emilyemorehouse

messages: + msg266913

keywords: + patch
2014-07-03 08:17:01BreamoreBoysetnosy: + christian.heimes, BreamoreBoy

messages: + msg222156
versions: + Python 3.4, Python 3.5, - Python 3.2
2012-01-14 12:02:14patrick.vrijlandtcreate