[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