代码之家  ›  专栏  ›  技术社区  ›  Crudough

使用python docx,如何关联XML命名空间前缀?

  •  1
  • Crudough  · 技术社区  · 8 年前

    这就是我目前正在尝试的(使用模式中的XML):

    def word_docs(emails):
        cbox = parse_xml('<xsd:complexType name="CT_FFCheckBox"><xsd:sequence>  \
                    <xsd:choice><xsd:element name="size"type="CT_HpsMeasure"/>  \
                    <xsd:element name="sizeAuto" type="CT_OnOff"/></xsd:choice> \
                    <xsd:element name="default" type="CT_OnOff" minOccurs="0"/> \
                    <xsd:element name="checked" type="CT_OnOff" minOccurs="0"/> \
                    </xsd:sequence></xsd:complexType>')
    
        doc = Document()
        title = doc.add_heading("Document", 0)
        table = doc.add_table(rows = 1, cols = 4)
        table.style = 'TableGrid'
    
        row = table.rows[0]
        row.cells[0].text = "Test"
    
        merged = (row.cells[1].merge(row.cells[2]))
        merged._tc._add_p()
        ....
    

    <w:tc>
    <w:tcPr>
        <w:tcW w:w="4788" w:type="dxa"/>
    </w:tcPr>
    <w:p wsp:rsidR="00834643" wsp:rsidRPr="00834643" wsp:rsidRDefault="00F12FD5" wsp:rsidP="00834643">
        <w:pPr>
            <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
        </w:pPr>
        <w:r>
            <w:fldChar w:fldCharType="begin">
                <w:fldData xml:space="preserve">/////2UAAAAUAAYAQwBoAGUAYwBrADEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</w:fldData>
            </w:fldChar>
        </w:r>
        <aml:annotation aml:id="1" w:type="Word.Bookmark.Start" w:name="Check2"/>
            <w:r>
                <w:instrText> FORMCHECKBOX </w:instrText>
            </w:r>
            <w:r>
                <w:fldChar w:fldCharType="end"/>
            </w:r>
        <aml:annotation aml:id="1" w:type="Word.Bookmark.End"/>
    </w:p>
    

    我已经能够手动添加名称空间 xmlns:xsd="http://www.w3.org/2001/XMLSchema" 手动创建一个文档,并且它似乎可以正确打开,我只是不确定如何以pythonic的方式实现这一过程的自动化。 通过python docx进行的XML对象操作可能不正确,但在比较了XML格式和python docx对象以及它们的处理方式之后,这对我来说是有意义的——我还无法用这个错误测试它。

    感谢您的帮助!

    1 回复  |  直到 8 年前
        1
  •  1
  •   scanny    8 年前

    查看Word 2007或更高版本的XML。docx文件,您只需解压缩它(它是一个Zip存档)。您可能需要添加一个。首先是zip扩展,具体取决于解压时使用的工具。您将对文档中的XML感兴趣。结果树中的xml文件。我想你会发现书签显示为 <w:bookmarkStart> <w:bookmarkEnd> 元素对,它不需要对的内置命名空间进行任何添加 python-docx .