2012-09-05 23 views
-2

我有一個XML文件,如下所示不存在的話:行添加到一個文件,如果使用python

<?xml version="1.0" encoding="utf-8"?> 
    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build" ToolsVersion="4.0"> 
    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> 
    <ImportGroup Label="ExtensionTargets"> 
    </ImportGroup> 
</Project> 

我想補充 </ImportGroup></Project>之間的直線<Import Project="$(ProjectName).targets" />如下

<?xml version="1.0" encoding="utf-8"?> 
    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build" ToolsVersion="4.0"> 
    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> 
    <ImportGroup Label="ExtensionTargets"> 
    </ImportGroup> 
    <Import Project="$(ProjectName).targets" /> 
</Project> 

如果文件中已存在行<Import Project="$(ProjectName).targets" />則不需要添加。

我該怎麼做?

+0

直視beautifulsoup或xmlDom –

+0

XML不應該用行來解釋,看看任何xml庫(例如標準ElementTree) – bereal

回答

2

你的問題是基於文本文件中的行,但輸入文件顯然是XML,所以假設你真的想添加一個導入,如果它不存在,試試這個:

import xml.dom.minidom 

importstring = "$(Projectname).targets" 
filename = "test.xml" 

tree = xml.dom.minidom.parse(filename) 
Project = tree.getElementsByTagName("Project")[0] 

for Import in Project.getElementsByTagName("Import"): 
    if Import.getAttribute("Project") == importstring: 
     break 
else: # note this is else belongs to the for, not the if 
    newImport = xml.dom.minidom.Element("Import") 
    newImport.setAttribute("Project", importstring) 
    Project.appendChild(newImport) 

tree.writexml(open(filename, 'w')) 
+0

謝謝chthonicdaemon, 這對我有很大的幫助。 有沒有什麼辦法可以在xml節點之後給換行符 – user1565954

+0

'writexml'帶有一個可選的參數'newl',它允許您指定行結束符。在Windows上,你可以使用'tree.writexml(open(filename,'w'),newl ='\ r \ n')'。可能更便攜的選擇是使用'os.linesep'。 – chthonicdaemon

2

取出您選擇的XML解析器,解析文件,使用相關API處理文件,將其寫回。

相關問題