Hola comunidad.

Les escribo ya que necesito ayuda con un archivo XML, el asunto es que tengo un 
XML con la siguiente estructura:

<?xml version="1.0" encoding="utf-8"?>

<include>
  <context name="default">

     <extension name="Local_Extension">
        <condition field="destination_number" expression="^(5644890\d{4})$">
        <action application="export" data="dialed_extension=$1"/>
        <action application="set" data="dialed_extension=$1"/>
        <action application="set" data="call_timeout=30"/>
        <action application="set" 
data="called_party_callgroup=${user_data(${dialed_ext}@${domain} var 
callgroup)}"/>
        <action application="hash" 
data="insert/last_dial/${called_party_callgroup}/${uuid}"/>
        <action application="set" data="hangup_after_bridge=true"/>
        <action application="set" data="continue_on_fail=true"/>
        <action application="hash" 
data="insert/${domain_name}-call_return/${dialed_extension}/${caller_id_number}"/>
        <action application="hash" 
data="insert/${domain_name}-last_dial_ext/${dialed_extension}/${uuid}"/>
        <action application="set"  
data="called_party_callgroup=${user_data(${dialed_extension}@${domain_name} var 
callgroup)}"/>
        <action application="hash" 
data="insert/${domain_name}-last_dial_ext/${called_party_callgroup}/${uuid}"/>
        <action application="hash" 
data="insert/${domain_name}-last_dial_ext/global/${uuid}"/>
        <action application="set" data="niblle_account=${nibble_account}"/>
        <action application="set" data="nibble_rate=0"/>
        <action application="set" data="lcr_rate=0"/>
        <action application="bridge" 
data="${sofia_contact(${dialed_extension})}"/>
        <action application="answer"/>
        <action application="sleep" data="1000"/>
        <action application="bridge" data="loopback/app=voicemail:default 
${domain_name} ${dialed_extension}"/>
      </condition>
    </extension>

  </context>
</include>

Y lo que busco hacer es lo siguiente, debo insertar un pedazo de codigo para el 
atributo <extensions> con lo siguiente:

     <extension name="Juanito">
        <condition field="destination_number" expression="^(56448908901)$">
        <action application="export" data="dialed_extension=$1"/>
        <action application="set" data="dialed_extension=$1"/>
        <action application="set" data="call_timeout=30"/>
        <action application="set" 
data="called_party_callgroup=${user_data(${dialed_ext}@${domain} var 
callgroup)}"/>
        <action application="hash" 
data="insert/last_dial/${called_party_callgroup}/${uuid}"/>
        <action application="set" data="hangup_after_bridge=true"/>
        <action application="set" data="continue_on_fail=true"/>
        <action application="hash" 
data="insert/${domain_name}-call_return/${dialed_extension}/${caller_id_number}"/>
        <action application="hash" 
data="insert/${domain_name}-last_dial_ext/${dialed_extension}/${uuid}"/>
        <action application="set"  
data="called_party_callgroup=${user_data(${dialed_extension}@${domain_name} var 
callgroup)}"/>
        <action application="hash" 
data="insert/${domain_name}-last_dial_ext/${called_party_callgroup}/${uuid}"/>
        <action application="hash" 
data="insert/${domain_name}-last_dial_ext/global/${uuid}"/>
        <action application="set" data="niblle_account=${nibble_account}"/>
        <action application="set" data="nibble_rate=0"/>
        <action application="set" data="lcr_rate=0"/>
        <action application="bridge" 
data="${sofia_contact(${dialed_extension})}"/>
        <action application="answer"/>
        <action application="sleep" data="1000"/>
        <action application="bridge" data="loopback/app=voicemail:default 
${domain_name} ${dialed_extension}"/>
      </condition>
    </extension>

Este atributo debe quedar antes del atributo extensions ya existente de tal 
forma que el archivo xml quede de la siguiente forma:

<?xml version="1.0" encoding="utf-8"?>

<include>
  <context name="default">

<extension name="Juanito">
        <condition field="destination_number" expression="^(56448908901)$">
        <action application="export" data="dialed_extension=$1"/>
        <action application="set" data="dialed_extension=$1"/>
        <action application="set" data="call_timeout=30"/>
        <action application="set" 
data="called_party_callgroup=${user_data(${dialed_ext}@${domain} var 
callgroup)}"/>
        <action application="hash" 
data="insert/last_dial/${called_party_callgroup}/${uuid}"/>
        <action application="set" data="hangup_after_bridge=true"/>
        <action application="set" data="continue_on_fail=true"/>
        <action application="hash" 
data="insert/${domain_name}-call_return/${dialed_extension}/${caller_id_number}"/>
        <action application="hash" 
data="insert/${domain_name}-last_dial_ext/${dialed_extension}/${uuid}"/>
        <action application="set"  
data="called_party_callgroup=${user_data(${dialed_extension}@${domain_name} var 
callgroup)}"/>
        <action application="hash" 
data="insert/${domain_name}-last_dial_ext/${called_party_callgroup}/${uuid}"/>
        <action application="hash" 
data="insert/${domain_name}-last_dial_ext/global/${uuid}"/>
        <action application="set" data="niblle_account=${nibble_account}"/>
        <action application="set" data="nibble_rate=0"/>
        <action application="set" data="lcr_rate=0"/>
        <action application="bridge" 
data="${sofia_contact(${dialed_extension})}"/>
        <action application="answer"/>
        <action application="sleep" data="1000"/>
        <action application="bridge" data="loopback/app=voicemail:default 
${domain_name} ${dialed_extension}"/>
      </condition>
    </extension>


     <extension name="Local_Extension">
        <condition field="destination_number" expression="^(5644890\d{4})$">
        <action application="export" data="dialed_extension=$1"/>
        <action application="set" data="dialed_extension=$1"/>
        <action application="set" data="call_timeout=30"/>
        <action application="set" 
data="called_party_callgroup=${user_data(${dialed_ext}@${domain} var 
callgroup)}"/>
        <action application="hash" 
data="insert/last_dial/${called_party_callgroup}/${uuid}"/>
        <action application="set" data="hangup_after_bridge=true"/>
        <action application="set" data="continue_on_fail=true"/>
        <action application="hash" 
data="insert/${domain_name}-call_return/${dialed_extension}/${caller_id_number}"/>
        <action application="hash" 
data="insert/${domain_name}-last_dial_ext/${dialed_extension}/${uuid}"/>
        <action application="set"  
data="called_party_callgroup=${user_data(${dialed_extension}@${domain_name} var 
callgroup)}"/>
        <action application="hash" 
data="insert/${domain_name}-last_dial_ext/${called_party_callgroup}/${uuid}"/>
        <action application="hash" 
data="insert/${domain_name}-last_dial_ext/global/${uuid}"/>
        <action application="set" data="niblle_account=${nibble_account}"/>
        <action application="set" data="nibble_rate=0"/>
        <action application="set" data="lcr_rate=0"/>
        <action application="bridge" 
data="${sofia_contact(${dialed_extension})}"/>
        <action application="answer"/>
        <action application="sleep" data="1000"/>
        <action application="bridge" data="loopback/app=voicemail:default 
${domain_name} ${dialed_extension}"/>
      </condition>
    </extension>

  </context>
</include>

De igual manera como lo debo hacer si deseo en algún momento eliminar una 
sección extension por ejemplo si quisiera ahora eliminar toda la sección del 
atributo <extension name="Juanito">

He estado mirando la librería ElementTree, pero veo que hay varias librerías 
disponibles, cual me recomiendan.

Les agradeceré alguna librería que me sirva para este objetivo y o algún 
ejemplo descriptivo sobre como insertar y eliminar secciones o atributos.

Saludos
_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a