python
  • xml
  • twisted
  • twisted.words
  • 2010-01-19 6 views 0 likes 
    0

    J'ai été surpris que l'objet de base XML (twisted.words.xish.domish.Element) ne puisse pas être entièrement créé à partir d'une chaîne XML. La façon la plus Alike est:Comment créer twisted.words.xish.domish.Element entièrement à partir de XML brut

    msg = "<iq to='[email protected]' id='id123' type='get'> \ 
          <query xmlns='http://juick.com/query#messages' mid='123456'/> \ 
         </iq>" 
    iq = domish.Element(('','')) 
    iq.addRawXml(msg) 
    

    Mais il génère:

    iq.toXml() 
    
    u"<><iq to='[email protected]' id='id123' type='get'>    <query xmlns='http://juick.com/query#messages' mid='123456'/>  </iq></>" 
    

    Est-il possible d'utiliser XML brut, sauf écrire ma propre mise en œuvre IElement?

    Répondre

    1

    C'est ce que j'utilise pour les fragments, adapté de quelque chose trouvé sur le web quelque part.

    from twisted.words.xish import domish 
    
    class ElementParser(object): 
        "callable class to parse XML string into Element" 
    
        def __call__(self, s): 
         self.result = None 
         def onStart(el): 
          self.result = el 
         def onEnd(): 
          pass 
         def onElement(el): 
          self.result.addChild(el) 
    
         parser = domish.elementStream() 
         parser.DocumentStartEvent = onStart 
         parser.ElementEvent = onElement 
         parser.DocumentEndEvent = onEnd 
         tmp = domish.Element(("", "s")) 
         tmp.addRawXml(s) 
         parser.parse(tmp.toXml()) 
         return self.result.firstChildElement() 
    
    +0

    Notez que l'analyseur doit recevoir str, non unicode objet (à savoir 'parser.parse (tmp.toXml(). Encoder ('utf-8'))'). Voir http://www.mail-archive.com/[email protected]/msg00432.html. – HoverHell

    Questions connexes