python - 将新元素插入现有 xml 时,lxml 不添加换行符

标签 python lxml

我有一大组现有的 xml 文件,我正在尝试向所有这些文件添加一个元素(对于许多 Maven 项目,它们是 pom.xml,我正在尝试向所有这些文件添加一个父元素他们)。以下是我的确切代码。

问题是 pom2.xml 中的最终 xml 输出在一行中包含完整的 parent 元素。虽然,当我自己打印元素时,它像往常一样将它写成 4 行。如何使用 parent 元素的正确格式打印出完整的 xml?

from lxml import etree

parentPom = etree.Element('parent')
groupId = etree.Element('groupId')
groupId.text = 'org.myorg'
parentPom.append(groupId)

artifactId = etree.Element('artifactId')
artifactId.text = 'myorg-master-pom'
parentPom.append(artifactId)

version = etree.Element('version')
version.text = '1.0.0'
parentPom.append(version)

print etree.tostring(parentPom, pretty_print=True)

pom = etree.parse("pom.xml")
projectElement = pom.getroot()
projectElement.insert(0, parentPom)

file = open("pom2.xml", 'wb')
file.write(etree.tostring(projectElement, pretty_print=True))
file.close()

打印输出:

<parent>
  <groupId>org.myorg</groupId>
  <artifactId>myorg-master-pom</artifactId>
  <version>1.0.0</version>
</parent>

pom2.xml 中相同元素的输出:

<parent><groupId>com.inmobi</groupId><artifactId>inmobi-master-pom</artifactId><version>1.0.1</version></parent><modelVersion>4.0.0</modelVersion>

最佳答案

您可能对此感兴趣。

http://lxml.de/FAQ.html#why-doesn-t-the-pretty-print-option-reformat-my-xml-output

简而言之,供以后引用:

parser = etree.XMLParser(remove_blank_text=True)
pom = etree.parse("pom.xml",parser)

关于python - 将新元素插入现有 xml 时,lxml 不添加换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13683014/

相关文章:

Python 3.4.0 -- 'ascii' 编解码器无法对位置 11-15 中的字符进行编码 : ordinal not in range(128) -- Unix 14. 04

python - 从 "_ElementUnicodeResult object of lxml.etree module"创建列表对象

python - 为什么 etree.find 找不到所提供示例的元素

python - 如何用python获取网格和平面之间的横截面周长?

python - 将包含 "de"、 "da"等的名称拆分为第一个、中间的、最后一个等

python - 无法以某种自定义方式排列和打印网页中的某些字段

Python Pandas - 不要按 y 轴值对条形图进行排序

python - 检查列表是否是 Pandas 数据框中另一个列表的子集

python - 使用 lxml 覆盖 XML 中的文本

python 在 mac os 10.10.1 上安装 lxml