gpt4 book ai didi

python - 使用 Python minidom 修改 XML

转载 作者:太空宇宙 更新时间:2023-11-04 03:46:44 25 4
gpt4 key购买 nike

这是一个示例 XML 文件:

<Project attri1="build">
<Import Project="blahblah" xmlns="someURI" />
<Property>
...
</Property>
<Property>
...
</Property>
...
<ItemGroup>
<Folder Include="Scripts" />
<Folder Include="Scripts/1.0" />
<Folder Include="Scripts/2.0/" />
...
</ItemGroup>
... some irrelevant ItemGroup is here
<ItemGroup>
<None Include="Scripts/1.0/001.sql" />
<None Include="Scripts/2.0/002.sql" />
</ItemGroup>
...
</Project>

上面的XML文件是基于Visual Studio的sqlproj文件的模板。根据里面有什么样的节点来区分。


我的研究:

import xml.dom.minidom
sql = xml.dom.minidom.parse('file.sqlproj')
itemGroup = sql.getElementsByTagName('ItemGroup')
folderGroup = itemGroup[0] # The first ItemGroup has folders
sqlGroup = itemGroup[2] # The 3rd ItemGroup has sql file list.

我要添加 <Folder Include="newpath" /><Folder Include="newsql" />使用 Python 的 xml.dom.minidom 库将其放入适当的 ItemGroup 中,并最终覆盖原始的 sqlproj 文件。

该怎么做?

如果您建议其他内置库,请举例说明,谢谢。

最佳答案

关于如何区分 ItemGroup 之间的信息,您没有提供足够的信息,但我假设它是基于内部节点的类型。

下面介绍了如何将新的 Folder 标签插入到 FolderNoneItemGroup 中。这个想法是找到第一个 FolderNone 标签,获取父级和 appendChild 到它:

import xml.dom.minidom

data = """<Project attri1="build">
<Import Project="blahblah" xmlns="someURI" />
<ItemGroup>
<Folder Include="Scripts" />
<Folder Include="Scripts/1.0" />
<Folder Include="Scripts/2.0/" />
</ItemGroup>
<ItemGroup/>
<ItemGroup>
<None Include="Scripts/1.0/001.sql" />
<None Include="Scripts/2.0/002.sql" />
</ItemGroup>
</Project>"""

dom = xml.dom.minidom.parseString(data)

new_folder = dom.createElement('Folder')
new_folder.setAttribute('Include', 'newpath')

folder = dom.getElementsByTagName('Folder')[0]
folder.parentNode.appendChild(new_folder)

new_script = dom.createElement('Folder')
new_script.setAttribute('Include', 'newsql')

none = dom.getElementsByTagName('None')[0]
none.parentNode.appendChild(new_script)

print dom.toprettyxml()

它打印:

<?xml version="1.0" ?>
<Project attri1="build">
<Import Project="blahblah" xmlns="someURI"/>
<ItemGroup>
<Folder Include="Scripts"/>
<Folder Include="Scripts/1.0"/>
<Folder Include="Scripts/2.0/"/>
<Folder Include="newpath"/>
</ItemGroup>
<ItemGroup/>
<ItemGroup>
<None Include="Scripts/1.0/001.sql"/>
<None Include="Scripts/2.0/002.sql"/>
<Folder Include="newsql"/>
</ItemGroup>
</Project>

关于python - 使用 Python minidom 修改 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23411791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com