使用Python minidom修改XML
下面是一个示例XML文件:使用Python minidom修改XML,python,xml,dom,minidom,Python,Xml,Dom,Minidom,下面是一个示例XML文件: <Project attri1="build"> <Import Project="blahblah" xmlns="someURI" /> <Property> ... </Property> <Property> ... </Property> ... <ItemGroup> &
<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>
我想使用Python的xml.dom.minidom库将
和
添加到适当的项目组中,并最终覆盖原始sqlproj文件
怎么做
如果您建议使用其他内置库,请给出一个示例,谢谢。关于如何区分
ItemGroup
之间的差异,您没有提供足够的信息,但我假设这是基于内部节点的类型
以下是如何将新的文件夹
标记插入文件夹
s和无
s的项目组
。想法是找到第一个文件夹
和None
标记,获取父项并将子项添加到其中:
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()
import xml.dom.minidom
data=”“”
"""
dom=xml.dom.minidom.parseString(数据)
new_folder=dom.createElement('文件夹')
新建文件夹.setAttribute('Include','newpath')
folder=dom.getElementsByTagName('folder')[0]
folder.parentNode.appendChild(新文件夹)
new_script=dom.createElement('文件夹')
new_script.setAttribute('Include','newsql')
none=dom.getElementsByTagName('none')[0]
none.parentNode.appendChild(新的_脚本)
打印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>
感谢您的想法,找到第一个子项并附加到其父项。@alecxe,它不会更新文件。这只会影响本地数据。
<?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>