【发布时间】:2012-10-08 01:40:22
【问题描述】:
我们有一个 XML 文档,其中包含我们希望更改的标签:
...<version>1.0</version>...
它深埋在 XML 文件中,但我们成功地使用 Beautiful Soup 将其内容替换为命令行参数。
问题是在修改树之后,我们需要写回我们读取它的文件。 但是,我们希望保持文档的原始格式。当我使用时:
fileForWriting = open(myXmlFile, 'w')
fileForWriting.write(soup.prettify())
prettify() 调用破坏了格式,我最终得到:
<version>
1.0
</version>
有什么方法可以保持 XML 文档的原始格式,同时替换单个标记文本?
注意:简单使用:
fileForWriting.write(str(soup))
将文本和标签保持在同一行,但消除了为便于阅读而人工添加的缩进和额外换行符。关闭,但没有雪茄。
根据要求,整个脚本:
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()
然后使用以下命令运行脚本:
python myscript.py someFile.xml 1.2
【问题讨论】:
-
你用什么代码来匹配和替换?
-
@bossylobster 添加了匹配/替换的代码。
-
我希望匹配/标签有索引、位置或行号,但似乎
BeautifulSoup不适合这样的事情:groups.google.com/forum/#!topic/beautifulsoup/sy2skfowsso
标签: python xml xml-parsing beautifulsoup