2016-11-09 78 views
0

我需要额外的参数添加到下面的XML文件:lxml.builder添加XML参数

<document type="freeswitch/xml"> 
    <section name="directory"> 
    <domain name="10.0.0.1"> 
     <params> 
     <param name="dial-string" value="{presence_id=${dialed_user}@${dialed_domain}}${sofia_contact(${dialed_user}@${dialed_domain})}"/> 
     </params> 
     <groups> 
     <group name="default"> 
      <users> 
      <user id="1000"> 
       <params> 
       <param name="password" value="c16b463e4aed7f04f102f2b6a8b7471d"/> 
       </params> 
      </user> 
      </users> 
     </group> 
     </groups> 
    </domain>  
    </section> 
</document> 

XML代码工作正常,但现在需要添加一个变量部分下用户部分,例:

<users> 
     <user id="1000"> 
     <params> 
      <param name="password" value="c16b463e4aed7f04f102f2b6a8b7471d"/> 
     </params> 
     <variables> 
      <variable name="mailbox" value="1000"/> 
     </variables> 
     </user> 
    </users> 

lxml.builder库不让我在E.user部分下添加E.variables。什么是正确的方式来添加新的部分?

print "Content-Type: text/xml" 
    print 

    from lxml.builder import E 
    from lxml import etree 

    doc = (
    E.document(
     E.section(name="directory"), type="freeswitch/xml") 
    ) 

    ... 

    groups = dom.find("groups") 
    searchStr = 'group[@name="{}"]'.format("default") 
    results = groups.xpath(searchStr) 
    if len(results) > 0: 
     grp = results[0] 
    else: 
     grp = E.group(
      E.users() 
      , name="default") 
     groups.append(grp) 

    # add the new user 
    grp.find("users").append(
     E.user(
      E.params(
       E.param(name=password_param, value=password), 
       E.param(name=vm_password_param, value=vm_password)) 
      , id=username)     
    ) 

回答

0
grp.find("users").append(
     E.user(
      E.params(
       E.param(name=password_param, value=password), 
       E.param(name=vm_password_param, value=vm_password)), 
      E.variables(
       E.var(name=mailbox_param, value=username)), 
      id=username), 
    )