使用xml.dom.minidom python编写xml文件时出现的问题

时间:2012-09-07 09:18:24

标签: python python-2.6

我有一个xml文件,python脚本用于向该xml文件添加新节点。我使用xml.dom.minidom模块处理xml文件。下面给出了使用python模块处理后的xml文件

<?xml version="1.0" ?><Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PostBuildEvent>
  <Command>xcopy &quot;SourceLoc&quot; &quot;DestLoc&quot;</Command>
</PostBuildEvent>
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
<Import Project="project.targets"/></Project>

我真正需要的是如下所示。更改是第一行之后和最后一行之前的换行符,并且“&amp; quot”转换为“

<?xml version="1.0" ?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PostBuildEvent>
  <Command>xcopy "SourceLoc" "DestLoc"</Command>
</PostBuildEvent>
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
<Import Project="project.targets"/>
</Project>

我使用的python代码如下所示

xmltree=xml.dom.minidom.parse(xmlFile)
for Import in Project.getElementsByTagName("Import"):
   newImport = xml.dom.minidom.Element("Import")
   newImport.setAttribute("Project", "project.targets")
vcxprojxmltree.writexml(open(VcxProjFile, 'w'))

我应该在代码中更新什么才能使xml格式正确

谢谢,

1 个答案:

答案 0 :(得分:1)

来自minidom的文档:

Node.toprettyxml([indent=""[, newl=""[, encoding=""]]])

Return a pretty-printed version of the document. indent specifies the indentation string and defaults to a tabulator; newl specifies the string emitted at the end of each line and defaults to \n.

这是你从minidom获得的所有定制。

尝试插入Text节点作为换行的根同胞。希望不灭。 我建议使用re模块中的正则表达式并手动插入。

至于删除SGML实体,在python标准库中显然有一个未记录的函数:

import HTMLParser
h = HTMLParser.HTMLParser()
unicode_string = h.unescape(string_with_entities)

或者,您可以使用re手动执行此操作,因为所有命名实体名称和相应的代码点都在htmlentitydefs模块中。