[Python-de] xml-Problem
Joerg Krebs
krebsj at cip.ifi.lmu.de
Son Feb 12 19:20:21 CET 2006
Hallo Leute,
kann mir jemand mit meinem xml-parser helfen, ich hab da einen Wurm
drin, und weiss nicht wo er liegt.
anbei ein test.xml file und der dazugehoerige dtd-file
als erwuenschter output soll folgendes rauskommen:
>HP001 Helicobacter_pylori
MATRTQARGAVVELLYAFESGNEEIKKIASSMLEEKKIKNNQLAFALSLFNGVLEKINEIDALIEPHLKDWDFKR
LGSMEKAILRLGAYEIGFTPTQNPIIINECIELGKLYAEPNTPKFLNAILDSLSKKLTQKPLN
>HP002 Helicobacter_pylori
MQIIEGKLQLQGNERVAILTSRFNHIITDRLQEGAMDCFKRHGGDEDLLDIVLVPGAYELPFILDKLLESEKYDG
VCVLGAIIRGGTPHFDYVSAEATKGIAHAMLKYSMPVSFGVLTTDNIEQAIERAGSKAGNKGFEAMSTLIELLSL
CQTLKG
>HP003 Helicobacter_pylori
MKTSKTKTPKSVLIAGPCVIESLENLRSIATKLQPLANNERLDFYFKASFDKANRTSLESYRGPGLEKGLEMLQT
IKEEFGYKILTDVHESYQASVAAKVADILQIPAFLCRQTDLIVEVSQTNAIVNIKKGQFMNPKDMQYSVLKALKT
RDKSIQSPTYETALKNGVWLCERGSSFGYGNLVVDMRSLKIMREFAPVIFDATHSVQMPGGANGKSSGDSSFAPI
LARAAAAVGIDGLFAETHVDPKNALSDGANMLKPDELEQLVTDMLKIQNLF
Vielleicht kann mir da ja jemand ein wenig helfen.
im Moment ist der output nur:
>HP003 Helicobacter_pylori
alle sequenzen.....
#!/usr/bin/python
# xmlparserBFAB.py
import sys
import string
from xml.sax import make_parser
import bfabhandler
saxparser = make_parser()
handler = bfabhandler.BfabHandler()
saxparser.setContentHandler(handler)
saxparser.parse(sys.argv[1])
if handler.isMatch:
print ">%s %s" % (handler.gname,handler.orgname)
print handler.sequence
#!/usr/bin/env python
# bfabhandler.py
from xml.sax.handler import ContentHandler
def normalize_whitespace(text):
"Remove redundant whitespace from a string"
return ' '.join(text.split())
class BfabHandler(ContentHandler):
"""
Ein Handler fuer BFAB-Files
"""
inGene = 0
inSequence = 0
isMatch = 0
inOrg = 0
inData = 0
gname = ""
sequence = ""
def startElement(self, name, attrs):
if name == "BENCHMARK_DATASET":
self.inData = 1
elif self.inData:
if name == "GENOME":
self.orgname =
normalize_whitespace(attrs.get("NAME",""))
self.inOrg = 1
elif self.inOrg:
if name == "GENE":
self.gname =
normalize_whitespace(attrs.get("NAME",""))
self.inGene = 1
self.isMatch = 1
elif self.inGene:
if name == "SEQUENCE":
self.inSequence = 1
def characters(self,ch):
if self.inSequence:
self.sequence += ch
def endElement(self, name):
if name == "SEQUENCE":
self.inSequence = 0
self.sequence=normalize_whitespace(self.sequence)
--
Joerg Krebs <krebsj at cip.ifi.lmu.de>
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname : test.xml
Dateityp : text/xml
Dateigröße : 7467 bytes
Beschreibung: nicht verfügbar
URL : http://python.net/pipermail/python-de/attachments/20060212/4146d7ea/test.bin
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname : bfab.dtd
Dateityp : text/x-dtd
Dateigröße : 777 bytes
Beschreibung: nicht verfügbar
URL : http://python.net/pipermail/python-de/attachments/20060212/4146d7ea/bfab.bin