Probleme mit xml.parsers.expat

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Daiwah

Freitag 24. September 2004, 12:12

Hallo, ich bin Python-Anfänger und muss mich in xml-Parsing mit expat einarbeiten.
Dazu habe ich das Beispiel aus der Doku in mein Script eingefügt:

Code: Alles auswählen

import xml.parsers.expat
import string, sys

# 3 handler functions
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)

def main():
    p= xml.parsers.expat.ParserCreate('ISO-8859-1')
    p.StartElementHandler = start_element
    p.EndElementHandler = end_element
    p.CharacterDataHandler = char_data
    
    p.ParseFile(open('test.xml', 'r'))

if __name__ == "__main__":
	main()
das xml-file:

Code: Alles auswählen

<?xml version="1.0"?>
<parent id="top"><child1 name="paul">Text goes here</child1>
<child2 name="fred">More text</child2>
</parent>
Die Ausgabe sollte eigentlich wie folgt aussehen:

Start element: parent {'id': 'top'}
Start element: child1 {'name': 'paul'}
Character data: 'Text goes here'
End element: child1
...
Allerdings steht bei mir vor den Attributen immer ein 'u', also:

Start element: parent {u'id': u'top'}
Start element: child1 {u'name': u'paul'}
Character data: u'Text goes here'
...

Keine Ahnung wieso, weiss da jemand Rat?

Dirk
fs111
User
Beiträge: 170
Registriert: Samstag 15. November 2003, 11:42
Kontaktdaten:

Freitag 24. September 2004, 12:17

Das bedeutet, dass es sich um Unicode-Strings handelt. Mit einem vorangestellten "u" erzeugt man in Python Unicode.

Code: Alles auswählen

>>> a = "abc"
>>> type(a)
<type 'str'>
>>> a = u"abc"
>>> type(a)
<type 'unicode'>
>>>

Grüße fs111
Pydoc-Integration in vim - Feedback willkommen: http://www.vim.org/scripts/script.php?script_id=910
Daiwah

Freitag 24. September 2004, 12:25

Danke erstmal für die schnelle Antwort...

wie kriege ich das dann weg, wenn ich es zum Beispiel ausgeben will, und kommt das nur bei Ausgaben mit print vor würde also bei interner Verarbeitung nicht stören ?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Freitag 24. September 2004, 13:43

Hi Daiwah,

das kommt nur vor, wenn du eine Liste oder ein Dictionary direkt mit print ausgiebst, dann werden die Einträge mit repr(objekt) ausgegeben.


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
Daiwah

Freitag 24. September 2004, 13:59

Alles klar, danke für die schnelle Hilfe !
Antworten