expat parsing error

K

kaklis

Hi i'm doing the following:

def start_element(name, attrs):
print 'Start element:', name, attrs
def end_element(name):
print 'End element:', name
def char_data(data):
print 'Character data:', repr(data)

class SimpleServer(LineReceiver): # Using Twisted

def connectionMade(self):
print 'Connection from: ', self.transport.client

def connectionLost(self, reason):
print self.transport.client, 'Disconnected'

def dataReceived(self, line):
"""Here the XML Parser"""

p = xml.parsers.expat.ParserCreate()

p.StartElementHandler = start_element
p.EndElementHandler = end_element
p.CharacterDataHandler = char_data
p.Parse(line, 1)

I got the following error
--- <exception caught here> ---
File "/usr/lib/python2.6/site-packages/Twisted-10.0.0-py2.6-linux-
x86_64.egg/twisted/internet/selectreactor.py", line 146, in
_doReadOrWrite
why = getattr(selectable, method)()
File "/usr/lib/python2.6/site-packages/Twisted-10.0.0-py2.6-linux-
x86_64.egg/twisted/internet/tcp.py", line 460, in doRead
return self.protocol.dataReceived(data)
File "stdiodemo.py", line 419, in dataReceived
p.Parse(line, 1)
xml.parsers.expat.ExpatError: syntax error: line 1, column 0


The XML Message is coming in the form of:

POST /test/pcp/Listener HTTP/1.1
user-agent:hjahsjdhaskd asdja d
Host:127.0.0.1
Content-Length: 547

<pttv_control_message version="1.0-M4-SNAPSHOT" build="599"
xmlns="http://bytemobile.com/pttv">
<cmdReply>
<code>200</code>
<message>OK, found 5 session entries</message>
<sessionList>
<session>
<id>06d4d59bf8f1abf57cadfe10139dd874</id>
<subscriberId>82</subscriberId>
<deviceClass>android</deviceClass>
</session>
</sessionList>
</cmdReply>
</pttv_control_message>

Please give me some hints
 
J

John Bokma

I got the following error
--- <exception caught here> ---
File "/usr/lib/python2.6/site-packages/Twisted-10.0.0-py2.6-linux-
x86_64.egg/twisted/internet/selectreactor.py", line 146, in
_doReadOrWrite
why = getattr(selectable, method)()
File "/usr/lib/python2.6/site-packages/Twisted-10.0.0-py2.6-linux-
x86_64.egg/twisted/internet/tcp.py", line 460, in doRead
return self.protocol.dataReceived(data)
File "stdiodemo.py", line 419, in dataReceived
p.Parse(line, 1)
xml.parsers.expat.ExpatError: syntax error: line 1, column 0


The XML Message is coming in the form of:

POST /test/pcp/Listener HTTP/1.1

Does Expat get this line as well? If so, that's the reason why you get
an error at line 1, column 0.
 
K

kaklis

Does Expat get this line as well? If so, that's the reason why you get
an error at line 1, column 0.

Yes but how can i fix it, how to "ignore" the headers and parse only
the XML?
Thanks
 
J

John Bokma

Yes but how can i fix it, how to "ignore" the headers and parse only
the XML?

The headers are followed by exactly one empty line, so you you simply
could remove lines up until including this empty line and then hand over
the data to the parser.
 
S

Stefan Behnel

(e-mail address removed), 01.06.2010 16:00:
how can i fix it, how to "ignore" the headers and parse only
the XML?

Consider reading the answers you got in the last thread that you opened
with exactly this question.

Stefan
 
K

kaklis

(e-mail address removed), 01.06.2010 16:00:


Consider reading the answers you got in the last thread that you opened
with exactly this question.

Stefan

That's exactly, what i did but something seems to not working with the
solutions i had, when i changed my implementation from pure Python's
sockets to twisted library!
That's the reason i have created a new post!
Any ideas why this happened?
Thanks Stefan
 
J

John Bokma

That's exactly, what i did but something seems to not working with the
solutions i had, when i changed my implementation from pure Python's
sockets to twisted library!
That's the reason i have created a new post!
Any ideas why this happened?

As I already explained: if you send your headers as well to any XML
parser it will choke on those, because the headers are /not/ valid /
well-formed XML. The solution is to remove the headers from your
data. As I explained before: headers are followed by one empty
line. Just remove lines up and until including the empty line, and pass
the data to any XML parser.
 
K

kaklis

As I already explained: if you send your headers as well to any XML
parser it will choke on those, because the headers are /not/ valid /
well-formed XML. The solution is to remove the headers from your
data. As I explained before: headers are followed by one empty
line. Just remove lines up and until including the empty line, and pass
the data to any XML parser.

Thank you so much i'll try it!
Antonis
 
J

John Machin

Dear John can you provide me a simple working solution?
I don't seem to get it

You're not wrong. Trysomething like this:

rubbish1, rubbish2, xml = your_guff.partition('\n\n')
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,981
Messages
2,570,188
Members
46,731
Latest member
MarcyGipso

Latest Threads

Top