使用python打印所有xml子节点
作者:互联网
我想打印我的xml文件的“ ItemGroup”子级的“ ClCompiler”子级的所有值.
我的python代码
tree = minidom.parse(project_path)
itemgroup = tree.getElementsByTagName('ItemGroup')
print (itemgroup[0].toxml())
我的结果
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<ItemGroup>
<ClCompile Include="../../avmedia/source/framework/MediaControlBase.cxx"/>
<ClCompile Include="../../avmedia/source/framework/mediacontrol.cxx"/>
<ClCompile Include="../../avmedia/source/framework/mediaitem.cxx"/>
<ClCompile Include="../../avmedia/source/framework/mediamisc.cxx"/>
</ItemGroup>
ECC
预期结果
<ClCompile Include="../../basic/source/basmgr/basmgr.cxx"/>
<ClCompile Include="../../basic/source/basmgr/vbahelper.cxx"/>
<ClCompile Include="../../basic/source/classes/codecompletecache.cxx"/>
ECC
我的xml的一部分
<ItemGroup>
<ClCompile Include="../../basic/source/basmgr/basicmanagerrepository.cxx"/>
<ClCompile Include="../../basic/source/basmgr/basmgr.cxx"/>
<ClCompile Include="../../basic/source/basmgr/vbahelper.cxx"/>
<ClCompile Include="../../basic/source/classes/codecompletecache.cxx"/>
</ItemGroup>
解决方法:
您完成了一半,在文档中找到了所有ItemGroup节点.现在,您必须遍历它们中的每一个并找到其ClCompile子代(很可能只有其中一个会拥有此类子代).
这是代码:
from xml.dom import minidom
project_path = "./a.vcxproj"
item_group_tag = "ItemGroup"
cl_compile_tag = "ClCompile"
def main():
tree = minidom.parse(project_path)
item_group_nodes = tree.getElementsByTagName(item_group_tag)
for idx, item_group_node in enumerate(item_group_nodes):
print("{} {} ------------------".format(item_group_tag, idx))
cl_compile_nodes = item_group_node.getElementsByTagName(cl_compile_tag)
for cl_compile_node in cl_compile_nodes:
print("\t{}".format(cl_compile_node.toxml()))
if __name__ == "__main__":
main()
笔记:
>我使用Python 3.4运行了代码(因为问题中未提及任何版本). 2.7兼容性将需要一些小的更改.
>我在第二个搜索标签为ClInclude的VStudio项目上进行了测试,但我想那是一个相当老的版本.
>第一条打印行仅用于说明父ItemGroup节点.注释掉它以获得所需的输出.
>不用说,您应该修改project_path以指向您的项目文件.
标签:minidom,python,xml-parsing,elementtree 来源: https://codeday.me/bug/20191013/1905706.html