2015-10-28 21 views
6

È possibile creare in qualche modo un elemento con valore di testo predefinito? Quindi non avrei bisogno di farlo in questo modo?Python lxml Sottoelemento con valore di testo?

from lxml import etree 

root = etree.Element('root') 
a = etree.SubElement(root, 'a') 
a.text = 'some text' # Avoid this extra step? 

intendo è possibile specificare gli attributi nel sottoelemento, ma non vedo un modo per specificare il testo in esso.

risposta

3

Non credo che ci sia un modo incorporato per farlo, ma se ci si trova a farlo molte volte, potrebbe essere meglio scrivere una funzione che incapsula la creazione del sub elemento e l'impostazione del testo. Esempio -

def create_SubElement(_parent,_tag,attrib={},_text=None,nsmap=None,**_extra): 
    result = etree.SubElement(_parent,_tag,attrib,nsmap,**_extra) 
    result.text = _text 
    return result 

e quindi creare il vostro elemento come -

a = create_SubElement(root,'a',_text="Some text") 

Si prega di notare, con questo non sarebbe in grado di creare attributo con nome _text usando argomenti a parola chiave, si avrebbe bisogno di utilizzare attrib parola chiave argomento per quello.

+0

Hm, ho pensato che fosse una soluzione, ma provandolo ho ricevuto questo errore: 'nome globale 'testo' non è definito ' – Andrius

+0

Oh, penso che sia stato un refuso nel codice. dovrebbe bee 'result.text = _text' – Andrius

+0

Che cosa è con quei trattini bassi di sottolineatura per alcuni argomenti e perché ignorate gli argomenti' attrib' e 'nsmap'? – BlackJack

1

Che ne dici di quanto segue?

etree.SubElement(root, "a").text = "some text" 

Funziona solo se non è necessario assegnare l'elemento risultante a una variabile.

+0

In effetti, ho bisogno di assegnare alla variabile, perché è usato come genitore per un altro elemento – Andrius