- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我想对 LibreOffice Writer 文档做一些非常简单的操作……然后再次保存为 ODT 文件……
这可能有什么问题?如果我尝试这样做,我会在 zip 文件(ODT 文件)中得到 2 个 content.xmls...奇怪的是,这两个(例如,如果解压缩为“content.xml”和“content_1.xml”)似乎包含修改后的内容...
zipfile = ZipFile( file_path, "a" )
for zip_info in zipfile.infolist():
contents = zipfile.read( zip_info.filename )
if ( zip_info.filename == "content.xml" ):
document_root = parseString( contents )
# ... mess around with the contents DOM document...
zipfile.writestr( zip_info, document_root.toxml() )
zipfile.close()
我知道您可以使用各种加载项和东西 (UNO)...但我希望它尽可能简单...
稍后
我的解决方案:发现无法在 Python 中以编程方式从 zip 文件中删除元素,我最初决定采用“制作新的 zip”方法:Delete file from zipfile with the ZipFile Module
然而,尽管我能够打开生成的 ODT 文件并从中提取所有文件,但 7Zip 提示 CRC 失败,说 content.xml 现在“已损坏”。显然是由于用一个“content.xml”替换另一个“content.xml”造成的。
最终答案:1) 将修改后的DOM结构输出到同一目录下的一个简单文件中,命名为“content.xml”:
f = open( file_dir + '\\content.xml', "w" )
print >>f, document_root.toxml()
f.close()
2) 在以编程方式关闭 ODT 文件时利用 7zip CLI:
import subprocess
subprocess.Popen( "7z u temp.odt content.xml", cwd=file_dir, shell=True )
最佳答案
根据文档的来源,您可能希望跳过对 zip 文件的处理并使用 Flat XML OpenDocument Format(我相信它是 .fodt 扩展名)并直接操作 XML .这将意味着更大的文件大小,但它们压缩得相当好,当你处理完它们后,你总是可以将它们保存为 .odt 文件。
关于python - 如何对 OOo/LibreOffice Writer 文档进行简单操作,然后保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16871014/
我是一名优秀的程序员,十分优秀!