es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Acceder a elementos anidados: Python Docx

Este es el XML extraído del documento de Word.

<w:r>
    <w:rpr>
        <w:rtl></w:rtl>
    </w:rpr>
    <w:fldchar w:fldchartype="begin">
        <w:ffdata>
            <w:name w:val="נפתח1"></w:name>
            <w:enabled></w:enabled>
            <w:calconexit w:val="0"></w:calconexit>
            <w:ddlist>
                <w:listentry w:val="A"></w:listentry>
                <w:listentry w:val="B"></w:listentry>
                <w:listentry w:val="C"></w:listentry>
                <w:listentry w:val="D"></w:listentry>
                <w:listentry w:val="E"></w:listentry>
            </w:ddlist>
        </w:ffdata>
    </w:fldchar>
</w:r>

Estoy tratando de llegar a las secciones <w:ddlist>, pero no puedo superar la sección <w:r>.

Sé que es posible obtener el elemento de “run” de la siguiente manera:

run = doc.paragraphs[0].runs[0]

pero “runs” no tiene ningún atributo similar a una lista, así que estoy bastante perdido en cómo continuar. Cualquier ayuda será apreciada.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para acceder a la sección w:ddList, deberás recorrer el árbol XML a partir del elemento run. Aquí tienes una posible solución utilizando la biblioteca lxml:

    from lxml import etree
    
    # asumiendo que `run` ya está definido
    xml = run._element.xml
    tree = etree.fromstring(xml)
    dd_list = tree.xpath('.//w:ddList', namespaces={'w': 'http://schemas.openxmlformats.org/wordprocessingml/2006/main'})
    
    # `dd_list` contendrá una lista de todos los elementos `w:ddList` encontrados en el XML de `run`
    

    El código anterior primero extrae el código XML de run, luego lo analiza en un objeto Element de lxml. Luego se utiliza el método xpath() para encontrar todos los elementos w:ddList en el árbol. Observa el uso del argumento namespaces para manejar el espacio de nombres XML definido por el prefijo w:.

    Una vez que tienes el/los elementos w:ddList, puedes acceder a sus atributos e hijos utilizando la API del objeto Element.

Comments are closed.