使用pythondocx,如何关联XML名称空间前缀?
我目前正在尝试使用PythonDocx库向word文档添加一个复选框。我已经将复选框XML缩小为两个可能的选项,第一个是从现有文档中评估word/document.XML文件,第二个是从XML模式中评估。当尝试将XML元素插入到简单文档中时,我收到了错误;“lxml.etree.XMLSyntaxError:未定义complexType上的命名空间前缀xsd” 这就是我目前正在尝试的(使用模式中的XML):使用pythondocx,如何关联XML名称空间前缀?,python,xml,checkbox,python-docx,Python,Xml,Checkbox,Python Docx,我目前正在尝试使用PythonDocx库向word文档添加一个复选框。我已经将复选框XML缩小为两个可能的选项,第一个是从现有文档中评估word/document.XML文件,第二个是从XML模式中评估。当尝试将XML元素插入到简单文档中时,我收到了错误;“lxml.etree.XMLSyntaxError:未定义complexType上的命名空间前缀xsd” 这就是我目前正在尝试的(使用模式中的XML): def word_文档(电子邮件): cbox=parse_xml('\ \ \ \ \
def word_文档(电子邮件):
cbox=parse_xml('\
\
\
\
\
')
doc=文件()
标题=文件添加标题(“文件”,0)
表=单据添加表(行=1,列=4)
table.style='TableGrid'
行=表。行[0]
行。单元格[0]。text=“测试”
合并=(行。单元格[1]。合并(行。单元格[2]))
合并。_tc._add_p()
....
以下是从现有文档中提取的XML:
<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>
/////2 UAAAAUAAYAQWBOAGUAYWAYBRADEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
FORMCHECKBOX
我已经能够手动添加名称空间xmlns:xsd=”http://www.w3.org/2001/XMLSchema“
手动添加到文档中,并且文档似乎打开正确,我只是不确定如何以python的方式自动执行此过程。
通过python docx操作XML对象可能不正确,但在比较XML格式和python docx对象以及它们的处理方式之后,这对我来说是有意义的——我还没有用这个错误测试它
感谢您的帮助!
谢谢 啊,好吧,你的评论解释了这一点。MS Word 2003 XML格式与MS Word 2007格式不同(顺便说一句,MS Word 2007格式本质上是XML,不需要转换) 要查看Word 2007或更高版本的.docx文件的XML,只需解压缩它(它是一个Zip归档文件)。您可能需要首先添加.zip扩展名,具体取决于解压时使用的工具。您将对结果树中document.XML文件中的XML感兴趣。我想您会发现书签以
和
元素对的形式出现,这将不需要在python docx的内置名称空间中添加任何内容
有关更多详细信息和示例,请参阅此GitHub问题:GitHub.com/python openxml/python docx/issues/403。您从哪个文档中提取了该示例XML?它是LibreOffice还是MSOffice的最新版本?据我所知,aml:
名称空间前缀在历史上不是WordprocessingXML名称空间的一部分。通常这将通过w:bookmarkStart
和w:bookmarksend
元素来完成,正如我所看到的那样。请参阅此GitHub问题,例如:。另请看示例XML的顶部,并显示映射到哪个名称空间(URL)aml
。使用@scanny
作为响应,以便通知我。@scanny示例xml来自MS Office Word 2007文档,该文档保存为Word 2003 xml文档。我正在运行一个Win7虚拟机,不确定是否有其他方法可以在没有其他工具的情况下检查xml。aml:
命名空间在此处定义:xmlns:aml=”http://schemas.microsoft.com/aml/2001/core“
关于GitHub问题,添加任何xml元素的总体问题是否归结为单独创建每个元素,然后将它们附加到相应的父元素?@scanny,请将您对GitHub问题的评论放到answe中,我非常乐意接受!谢谢
<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>