I want to print all the values of the \"ClCompiler\" child of \"ItemGroup\" of my xml file.
tree = minidom.parse(project_path)
itemgroup
An alternate solution using ElementTree,
import xml.etree.ElementTree as ET
root = ET.fromstring('''\
<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>
''')
for child in root.iter('ClCompile'):
print ET.tostring(child)
While parsing from file,
import xml.etree.ElementTree as ET
tree=ET.parse('text.xml')
root = tree.getroot()
for child in root.iter('ClCompile'):
print ET.tostring(child)
You made it half way.
You found all the ItemGroup nodes in the document. Now, you have to iterate through each of them and find its ClCompile children (most likely only one of them will have such children).
Here's the code:
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()
Notes:
print
line is only for illustrating the parent ItemGroup node. Comment it out to achieve your desired output.project_path
to point to your project file.