Python 将修改后的Beauty Soup树写入文件,同时保持原始XML格式

Python 将修改后的Beauty Soup树写入文件,同时保持原始XML格式,python,xml,xml-parsing,beautifulsoup,Python,Xml,Xml Parsing,Beautifulsoup,我们有一个XML文档,其中有一个我们希望更改的标记: …1.0… 它被深埋在XML文件中,但我们成功地使用Beautiful Soup将其内容替换为命令行参数 问题是,在修改树之后,我们需要写回从中读取的文件。但是,我们希望保持文档的原始格式。当我使用: fileForWriting = open(myXmlFile, 'w') fileForWriting.write(soup.prettify()) prettify()调用中断了格式设置,结果是: <version> 1.0

我们有一个XML文档,其中有一个我们希望更改的标记:

…1.0…

它被深埋在XML文件中,但我们成功地使用Beautiful Soup将其内容替换为命令行参数

问题是,在修改树之后,我们需要写回从中读取的文件。但是,我们希望保持文档的原始格式。当我使用:

fileForWriting = open(myXmlFile, 'w')
fileForWriting.write(soup.prettify())
prettify()
调用中断了格式设置,结果是:

<version>
 1.0
</version>
然后使用以下命令运行脚本:


python myscript.py someFile.xml 1.2

如果使用
xml.elementtree
,则
tree.write(file)
方法仅用LF替换CRLF,这在尝试将xml文件导入例如PyXB时也会产生问题

我找到的解决方案是使用ElementTree来查找需要替换的内容。然后我执行
source\u XML='new value'。加入(source\u XML.split('what you need to replace')
最后是一个
文件。写入(source\u XML)


这不好,但解决了问题。不过,我不介意缩进,所以在这一点上我真的不能说。我只会在需要打印时使用
pprint.pprint()

您使用什么代码进行匹配和替换?@bossylobster为匹配/替换添加了代码。我希望匹配/标记会有索引、位置或行号,但似乎
BeautifulSoup
不适用于这些内容:
from BeautifulSoup import BeautifulSoup as bs

import sys

xmlFile = sys.argv[1:][0]
version = sys.argv[1:][1]

fileForReading = open(xmlFile, 'r')
xmlString = fileForReading.read()
fileForReading.close()

soup = bs(xmlString)

soup.findAll('version')[1].contents[0].replaceWith(version)

fileForWriting = open(xmlFile, 'w')
fileForWriting.write(str(soup))
fileForWriting.close()