2016-04-20 11 views
1

Ich versuche, XML-Datei mit Python lxml Builder lke unten zu erstellen:Python3 lxml Baumeister

<entityset> 
    <entity> 
    <temp code="1stCode"/> 
     <attr code="2ndCode"> 
     <value>PythonIsFun</value> 
     </attr> 
     <attr code="3rdCode"> 
     <value>PythonIsStillFun</value> 
     </attr> 
    </entity> 
</entityset> 

Mein Versuch:

import lxml.builder as lb 

def generate_xml(temp_code, value, value2): 

    temp = lb.E.entityset(
     lb.E.entity(
      lb.E.temp(code='{0}'.format(temp_code)), 
      lb.E.attr(code='2ndCode'), 
      lb.E.value('{0}'.format(value)), 
      lb.E.attr(code='3rdCode'), 
      lb.E.value('{0}'.format(value2)) 
     ) 
    ) 
    print(etree.tounicode(temp, pretty_print=True)) 

generate_xml('1stCode', 'PythonIsFun', 'PythonIsStillFun') 

Ausgang:

<entityset> 
    <entity> 
    <temp code="1stCode"/> 
    <attr code="2ndCode"/> 
    <value>PythonIsFun</value> 
    <attr code="3rdCode"/> 
    <value>PythonIsStillFun</value> 
    <attribute/> 
    </entity> 
</entityset> 

Problem ist dass ich nicht weiß, wie man <value> </value> Elemente zwischen <attr code="code here"> </attr> Tags hinzufügen. Gibt es eine Möglichkeit, dies mit dem lxml-Element-Builder zu tun?

Antwort

0

Bewegen Sie einfach lb.E.value() Parameter von lb.E.attr() zu sein:

temp = lb.E.entityset(
     lb.E.entity(
      lb.E.temp(code='{0}'.format(temp_code)), 
      lb.E.attr(lb.E.value('{0}'.format(value)), code='2ndCode'), 
      lb.E.attr(lb.E.value('{0}'.format(value2)), code='3rdCode'), 
     ) 
    )