Problem with "&" charater in xml.
Kirt
moqtar at gmail.com
Thu Jul 13 02:34:20 EDT 2006
How do i append characters to a string?
actually my entire handler code is
class oldHandler(ContentHandler):
def __init__(self):
self.fn = 0
self.dn = 0
self.i=[]
self.x=""
self.y=""
self.z=""
self.t=0
self.xx=''
def startElement(self, name, attrs):
if name=='dirname':
self.dn=1
if name=='name':
self.fn=1
if name=='time':
self.t=1
def characters(self,str):
if self.dn:
self.x=str
if self.fn:
self.y=str
if self.t:
self.z=str
ss= self.x+'/'+self.y+','+self.z+ '\r \n'
self.i.append(ss)
def endElement(self, name):
if name == 'dirname':
self.dn=0
if name=='name':
self.fn=0
if name=='time':
self.t=0
def endDocument(self):
f=open('old.txt', 'w')
self.i.sort
f.writelines(self.i)
f.close
so my old.txt now looks like this
y+def.txt,200607130417
C:\Documents and Settings\Administrator\Desktop\1\hii
wx\abc.txt,200607130415
But i wont the output as
C:\Documents and Settings\Administrator\Desktop\1\bye
w&y\def.txt,200607130417
C:\Documents and Settings\Administrator\Desktop\1\hii
wx\abc.txt,200607130415
Stefan Behnel wrote:
> Kirt wrote:
> > i have walked a directory and have written the foll xml document.
> > one of the folder had "&" character so i replaced it by "&"
> > #------------------test1.xml
> > <Directory>
> > <dirname>C:\Documents and Settings\Administrator\Desktop\1\bye
> > w&y </dirname>
> > <file>
> > <name>def.txt</name>
> > <time>200607130417</time>
> > </file>
> > </Directory>
> > <Directory>
> > <dirname>C:\Documents and Settings\Administrator\Desktop\1\hii
> > wx</dirname>
> > <file>
> > <name>abc.txt</name>
> > <time>200607130415</time>
> > </file>
> > </Directory
> >
> > now in my python code i want to parse this doc and print the directory
> > name.
> > ###----------handler------------filename---handler.py
> > from xml.sax.handler import ContentHandler
> > class oldHandler(ContentHandler):
> > def __init__(self):
> > self.dn = 0
> > def startElement(self, name, attrs):
> > if name=='dirname':
> > self.dn=1
> >
> > def characters(self,str):
> > if self.dn:
> > print str
>
>
> The problem is here. "print" adds a newline. Don't use print, just append the
> characters (to a string or list) until the endElement callback is called.
>
>
> > def endElement(self, name):
> > if name == 'dirname':
> > self.dn=0
> >
> >
> > #---------------------------------------------------------------------
> > #main code--- fname----art.py
> > import sys
> > from xml.sax import make_parser
> > from handlers import oldHandler
> >
> > ch = oldHandler()
> > saxparser = make_parser()
> >
> > saxparser.setContentHandler(ch)
> > saxparser.parse(sys.argv[1])
> > #-----------------------------------------------------------------------------
> > i run the code as: $python art.py test1.xml
> >
> > i am getting output as:
> >
> > C:\Documents and Settings\Administrator\Desktop\1\bye w
> > &
> > y
> > C:\Documents and Settings\Administrator\Desktop\1\hii wx
> >
> > where as i need an output which should look like this.
> > C:\Documents and Settings\Administrator\Desktop\1\bye w&y
> >
> > C:\Documents and Settings\Administrator\Desktop\1\hii wx
> >
> > Can someone tell me the solution for this.
> >
More information about the Python-list
mailing list