所以我试图用python搜索并替换vcxproj文件中的xml关键字RunCodeAnalysis。 我对python很陌生,所以请保持温和,但我认为这样做是最简单的语言。 我阅读了一些类似的例子,并提出了下面的代码,但无论我搜索ElementTree查找调用总是返回None。
from xml.etree import ElementTree as et
xml = '''\
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Protected_Debug|Win32'">
<RunCodeAnalysis>false</RunCodeAnalysis>
</PropertyGroup>
</Project>
'''
et.register_namespace('', "http://schemas.microsoft.com/developer/msbuild/2003")
tree = et.ElementTree(et.fromstring(xml))
print(tree.find('.//RunCodeAnalysis'))
以下是在线简化代码示例:https://ideone.com/1T1wsb
谁能告诉我我做错了什么?
答案 0 :(得分:0)
好的..所以@ThomWiggers帮助我完成了这个缺失的部分 - 这是我最后的代码所有它的天真荣耀。没有参数检查或任何类型的智能,但它需要两个参数 - 文件名以及是否将静态代码分析转为true或false。我有大约30个项目,我想为夜间版本打开它,但实际上不想每天都打开它,因为它太慢了。
import sys
from xml.etree import ElementTree as et
et.register_namespace('', "http://schemas.microsoft.com/developer/msbuild/2003")
tree = et.parse(sys.argv[1])
value = sys.argv[2]
for item in tree.findall('.//{http://schemas.microsoft.com/developer/msbuild/2003}RunCodeAnalysis'):
item.text = value
for item in tree.findall('.//{http://schemas.microsoft.com/developer/msbuild/2003}EnablePREfast'):
item.text = value
tree.write(sys.argv[1])