2015-04-23 59 views
2

我正在使用BS4來解析XML文件並嘗試將其寫回新的XML文件。在使用Beautifulsoup解析時維護XML文件的縮進

輸入文件:

<tag1> 
    <tag2 attr1="a1"> example text </tag2> 
    <tag3> 
    <tag4 attr2="a2"> example text </tag4> 
    <tag5> 
     <tag6 attr3="a3"> example text </tag6> 
    </tag5> 
    </tag3> 
</tag1> 

腳本:

soup = BeautifulSoup(open("input.xml"), "xml") 
f = open("output.xml", "w") 
f.write(soup.encode(formatter='minimal')) 
f.close() 

輸出:

<tag1> 
<tag2 attr1="a1"> example text </tag2> 
<tag3> 
<tag4 attr2="a2"> example text </tag4> 
<tag5> 
<tag6 attr3="a3"> example text </tag6> 
</tag5> 
</tag3> 
</tag1> 

我想保留IND輸入文件的入口。我嘗試使用美化選項。

輸出,美化:

<tag1> 
    <tag2 attr1="a1"> 
    example text 
    </tag2> 
    <tag3> 
    <tag4 attr2="a2"> 
     example text 
    </tag4> 
    <tag5> 
     <tag6 attr3="a3"> 
     example text 
     </tag6> 
    </tag5> 
    </tag3> 
</tag1> 

但是這不是我想要的。我想要維護輸入文件中標籤的確切縮進 。

+0

檢查[這個問題的](http://stackoverflow.com/questions/15509397/custom-indent-width-for-beautifulsoup-prettify)的答案。 – primeape91

回答

1

不幸的是,你不能直接。美麗的湯分析它的輸入並且不保留原始格式的痕跡。

因此,如果不要修改XML,可以先將它作爲整個字符串在內存中讀取,然後將該字符串饋送到BS中以解析它並進行測試,然後用它來寫回新的文件。

如果要修改XML並使用特殊格式,則必須手動導航BS樹並將其手動格式化爲