Verständnisfrage zu lxml und namepace-Vergabe bei Attributen

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.
Marky
User
Beiträge: 24
Registriert: Donnerstag 22. Januar 2009, 08:12

Verständnisfrage zu lxml und namepace-Vergabe bei Attributen

Beitragvon Marky » Dienstag 28. April 2009, 14:23

Hallo zusammen,

ich hätte da mal ein Frage zur lxml-lib und dem Binden des space-Attributes an den xml-namespace.

Angenommen ich hätte ein XML-Fragement, wie nachfolgend beschrieben mit einem space-Attribut.

Code: Alles auswählen

 >>   xml = "<root xml:space=\"preserve\"/>"
 >>   root = etree.fromstring(xml)
 >>   print etree.tostring(root)
 <root xml:space="preserve"/>


Funktioniert wunderbar bei der Ausgabe und der Namespace bleibt erhalten.
Nun kann es ja vorkommnen, dass ich so ein Attribut mit entsprechendem Namespace selbst an ein neues Element setzen will, doch wie mache ich das ?
Weiß da jemand Rat?

Code: Alles auswählen

>> root = etree.Element("root", space="preserve")
>> print etree.tostring(root)
<root space="preserve"/>


Wie kann ich für das space-Attribut den xml-namespace setzen? Die Ausgabe soll genauso aussehen, wie im ersten Fall.
Gruß
Marky
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

Beitragvon Dill » Dienstag 28. April 2009, 14:30

du setzt den ns in {} vor den tag-name.

http://codespeak.net/lxml/tutorial.html#namespaces
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 28. April 2009, 14:34

Code: Alles auswählen

ET.tostring(ET.Element("root", {'xml:space': 'preserve'}))
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Marky
User
Beiträge: 24
Registriert: Donnerstag 22. Januar 2009, 08:12

Beitragvon Marky » Dienstag 28. April 2009, 14:40

hm ... da passiert folgendes:

Code: Alles auswählen

    print etree.tostring(etree.Element("root", {'xml:space': 'preserve'}))
  File "lxml.etree.pyx", line 2352, in lxml.etree.Element (src/lxml/lxml.etree.c:49394)
  File "apihelpers.pxi", line 143, in lxml.etree._makeElement (src/lxml/lxml.etree.c:11072)
  File "apihelpers.pxi", line 131, in lxml.etree._makeElement (src/lxml/lxml.etree.c:10942)
  File "apihelpers.pxi", line 277, in lxml.etree._initNodeAttributes (src/lxml/lxml.etree.c:12501)
  File "apihelpers.pxi", line 1380, in lxml.etree._attributeValidOrRaise (src/lxml/lxml.etree.c:22491)
ValueError: Invalid attribute name u'xml:space'


Nachtrag: Ist die aktuelle Version 2.2
Gruß

Marky
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 28. April 2009, 14:42

Ups, sorry, ich habe da aus versehen ElementTree genutzt, da funktioniert das so. :oops:
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Marky
User
Beiträge: 24
Registriert: Donnerstag 22. Januar 2009, 08:12

Beitragvon Marky » Dienstag 28. April 2009, 14:47

Noch ein Nachtrag für Dill: Hier geht es nicht um den Namespace an Elementen generell, sondern um den Namespace für die beiden Attribute space und lang http://www.w3.org/XML/1998/namespace
Gruß

Marky
Marky
User
Beiträge: 24
Registriert: Donnerstag 22. Januar 2009, 08:12

Beitragvon Marky » Dienstag 28. April 2009, 14:55

Hallo Leute,

so gehts mit lxml.etree:

Code: Alles auswählen

root = etree.Element("root", attrib={'{http://www.w3.org/XML/1998/namespace}space': 'preserve'})
    print etree.tostring(root)


Hab' eben Nachricht von der Mailingliste gekriegt ... :wink:
Ist das hier dann auch bekannt...

Trotzdem Danke für die schnelle Reaktionszeit!
Gruß

Marky
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

Beitragvon Dill » Dienstag 28. April 2009, 14:55

steht das da nicht?
naja für attribute gehts aber genauso...
in {} vor att-name.

EDIT:
ok, hast es ja jetzt.
aber den transfer hättest du auch selbst leisten könne, dass wenn du den ns vor dem @ willst ihn nicht vor den ele-tag setzt...
Marky
User
Beiträge: 24
Registriert: Donnerstag 22. Januar 2009, 08:12

Beitragvon Marky » Dienstag 28. April 2009, 15:01

jaja, danke für den Hinweis... :lol:
wollte eben gerade zugeben, dass ich den Tansfer da nicht geschafft habe ... :K
Gruß

Marky

Wer ist online?

Mitglieder in diesem Forum: Google [Bot]