2

私はxmlファイルを持っており、そのxmlファイルに新しいノードを追加するためにpythonスクリプトが使用されています.xmlファイルを処理するためにxml.dom.minidomモジュールを使用しました.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>

What i actually needed is as given below .The changes are a newline character after the first line and before the last line and also '&quot' is converted to "

<?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>

The python code i used is given below

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'))

What should i update in my code to get the xml in correct format

Thanks,

4

1 に答える 1

1

ミニダムのドキュメントから:

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から得られるすべてのカスタマイズです。

改行のルート兄弟としてテキストノードを挿入しようとしました。希望は最後に死ぬ。reモジュールの正規表現を使用して手動で挿入することをお勧めします。

SGMLエンティティの削除に関しては、Python標準ライブラリにそのための文書化されていない関数があるようです。

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

htmlentitydefsまたは、名前付きエンティティ名と対応するコードポイントがすべてモジュール内にあるため、reを使用して手動でこれを行うこともできます。

于 2012-09-07T10:37:55.270 に答える