lxml.builder添加XML参数

2024-04-26 20:51:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要向以下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代码工作正常,但现在需要在user部分下添加variables部分,例如:

    <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)                
    )

Tags: nameidparamvaluedomaingrouppasswordparams
1条回答
网友
1楼 · 发布于 2024-04-26 20:51:23
    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),
    )

相关问题 更多 >