Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用pythondocx,如何关联XML名称空间前缀?_Python_Xml_Checkbox_Python Docx - Fatal编程技术网

使用pythondocx,如何关联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('\ \ \ \ \

我目前正在尝试使用PythonDocx库向word文档添加一个复选框。我已经将复选框XML缩小为两个可能的选项,第一个是从现有文档中评估word/document.XML文件,第二个是从XML模式中评估。当尝试将XML元素插入到简单文档中时,我收到了错误;“lxml.etree.XMLSyntaxError:未定义complexType上的命名空间前缀xsd”

这就是我目前正在尝试的(使用模式中的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>