Python 将修改后的Beauty Soup树写入文件,同时保持原始XML格式
我们有一个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
…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()