Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python minidom修改XML_Python_Xml_Dom_Minidom - Fatal编程技术网

使用Python minidom修改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> &

下面是一个示例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>
我想使用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>