Python:xml.Find始终返回none

时间:2018-06-18 07:51:38

标签: python xml elementtree

所以我试图用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

谁能告诉我我做错了什么?

1 个答案:

答案 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])