使用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>

使用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))

从文件解析时,

import xml.etree.ElementTree as ET
tree=ET.parse('text.xml')
root = tree.getroot()
for child in root.iter('ClCompile'):
    print(ET.tostring(child))

您将其制成一半。
您在文档中找到了所有 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 兼容性将需要一些微小的更改。
  • 我在 vstudio 项目上进行了测试,其中第二个搜索标签是 clinclude ,但我想那是一个相当古老的版本。
  • 1 st print行仅用于说明父 itemgroup 节点。评论以达到所需的输出。
  • 不必说您应该修改project_path指向项目文件。

相关内容

  • 没有找到相关文章

最新更新