-2

我有一个xml文件如下:

<?xml version="1.0" encoding="utf-8"?>
  <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build" ToolsVersion="4.0">
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>

我想在和<Import Project="$(ProjectName).targets" />之间 添加一条线如下</ImportGroup></Project>

<?xml version="1.0" encoding="utf-8"?>
  <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build" ToolsVersion="4.0">
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
  <Import Project="$(ProjectName).targets" />
</Project>

如果<Import Project="$(ProjectName).targets" />文件中已经存在该行,则无需添加。

我怎样才能做到这一点?

4

2 回答 2

2

您的问题基于文本文件中的行,但输入文件显然是 XML,因此假设您实际上想要添加一个 Import(如果它不存在),试试这个:

import xml.dom.minidom

importstring = "$(Projectname).targets"
filename = "test.xml"

tree = xml.dom.minidom.parse(filename)
Project = tree.getElementsByTagName("Project")[0]

for Import in Project.getElementsByTagName("Import"):
    if Import.getAttribute("Project") == importstring:
        break
else: # note this is else belongs to the for, not the if
    newImport = xml.dom.minidom.Element("Import")
    newImport.setAttribute("Project", importstring)
    Project.appendChild(newImport)

tree.writexml(open(filename, 'w'))
于 2012-09-05T07:11:26.993 回答
2

使用您选择的 XML 解析器,解析文件,使用相关 API 操作文件,然后将其写回。

于 2012-09-05T06:05:59.327 回答