Python: 使用 lxml 库将 XML 内容写入文件
Python: Write XML Contents to a file using lxml library
我有一个 Python 函数,可以将 xml 字符串写入文件。代码如下:
我的file_contents是一个字符串如下:
<A>Some Text</A>
<B>Some other Text</B>
我想将这个字符串包含在里面并在文件中添加 xml header : 。我似乎无法弄清楚这一点。
from lxml import etree
def create_or_overwrite_file(file_name, file_contents):
try:
print('file contents to be written: %s' % file_contents)
'''
#root = etree.fromstring(file_contents) #this line definitely fails because file_contents is NOT a valid XML
#print('root: %s' % str(root))
#newroot = etree.Element('RootElement')
#newroot.insert(0, root)
#print('newroot: %s' % newroot)
#new_file_contents = etree.tostring(newroot)
#print('NewFileContents: %s' % str(new_file_contents))
'''
root = etree.fromstring(file_contents).getroot()
et = etree.ElementTree(root)
with open(str(file_name), "wb") as f:
et.write(f, encoding="utf-8", xml_declaration=True, pretty_print=True)
print('wrote file_contents to %s' % str(file_name))
except Exception as f:
print(str(f))
我似乎无法使这段代码正常工作。感谢任何帮助。
如果您从字符串中解析(而不是从文件中读取)。然后 fromstring
已经 returns 根。您不需要 .getroot()
调用:
root = etree.fromstring(file_contents)
有了这个改变,你的代码对我有用。
现在,不清楚您为什么要这样做。如果 file_contents
已经是 XML,因为它必须是这样才能工作,那么为什么不只是 open(file_name).write(file_contents)
?为什么解码 XML 然后再解码 re-encode?
跟进
如果您只需要一个包装器,那么这会起作用:
def create_or_overwrite_file(file_name, file_contents):
f = open(file_name,'w')
print( '<?xml version="1.0"?>\n<root>', file=f )
f.write(file_contents)
print( '</root>', file=f )
不涉及 lxml
可能更有效。哪里更有意义取决于您。
我有一个 Python 函数,可以将 xml 字符串写入文件。代码如下:
我的file_contents是一个字符串如下:
<A>Some Text</A>
<B>Some other Text</B>
我想将这个字符串包含在里面并在文件中添加 xml header : 。我似乎无法弄清楚这一点。
from lxml import etree
def create_or_overwrite_file(file_name, file_contents):
try:
print('file contents to be written: %s' % file_contents)
'''
#root = etree.fromstring(file_contents) #this line definitely fails because file_contents is NOT a valid XML
#print('root: %s' % str(root))
#newroot = etree.Element('RootElement')
#newroot.insert(0, root)
#print('newroot: %s' % newroot)
#new_file_contents = etree.tostring(newroot)
#print('NewFileContents: %s' % str(new_file_contents))
'''
root = etree.fromstring(file_contents).getroot()
et = etree.ElementTree(root)
with open(str(file_name), "wb") as f:
et.write(f, encoding="utf-8", xml_declaration=True, pretty_print=True)
print('wrote file_contents to %s' % str(file_name))
except Exception as f:
print(str(f))
我似乎无法使这段代码正常工作。感谢任何帮助。
如果您从字符串中解析(而不是从文件中读取)。然后 fromstring
已经 returns 根。您不需要 .getroot()
调用:
root = etree.fromstring(file_contents)
有了这个改变,你的代码对我有用。
现在,不清楚您为什么要这样做。如果 file_contents
已经是 XML,因为它必须是这样才能工作,那么为什么不只是 open(file_name).write(file_contents)
?为什么解码 XML 然后再解码 re-encode?
跟进
如果您只需要一个包装器,那么这会起作用:
def create_or_overwrite_file(file_name, file_contents):
f = open(file_name,'w')
print( '<?xml version="1.0"?>\n<root>', file=f )
f.write(file_contents)
print( '</root>', file=f )
不涉及 lxml
可能更有效。哪里更有意义取决于您。