使用lxml在Python中格式化xml文件

2024-04-19 06:17:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用PythonLXML向tomcat server.xml添加vhost条目

import io
from lxml import etree

newdoc = etree.fromstring('<Host name="getrailo.com" appBase="webapps"><Context path=""    docBase="/var/sites/getrailo.org" /><Alias>www.getrailo.org</Alias><Alias>my.getrailo.org</Alias></Host>')
doc = etree.parse('/root/server.xml')
root = doc.getroot()
for node1 in root.iter('Service'):
        for node2 in node1.iter('Engine'):
                node2.append(newdoc)
doc.write('/root/server.xml')

问题是它正在移除 <?xml version='1.0' encoding='utf-8'?>

输出文件顶部的行和vhost条目都在一行中

<Host name="getrailo.org" appBase="webapps">
         <Context path="" docBase="/var/sites/getrailo.org" />
         <Alias>www.getrailo.org</Alias>
         <Alias>my.getrailo.org</Alias>
</Host>

Tags: nameorgimporthostdocserver条目alias
1条回答
网友
1楼 · 发布于 2024-04-19 06:17:27

首先,您需要使用remove_blank_text解析现有文件,以便它是干净的,并且没有额外的空间,我认为这在本例中是一个问题

parser = etree.XMLParser(remove_blank_text=True)
newdoc = etree.fromstring('/root/server.xml' parser=parser)

然后您可以安全地将它写回磁盘,并在doc.write()中设置pretty_printxml_declaration

doc.write('/root/server.xml',  
          xml_declaration=True, 
          encoding='utf-8', 
          pretty_print=True)

相关问题 更多 >