【发布时间】:2022-02-18 05:33:28
【问题描述】:
我有一个将 xml 字符串写入文件的 Python 函数。代码如下:
我的 file_contents 是一个字符串,如下:
<A>Some Text</A>
<B>Some other Text</B>
我想把这个字符串附在里面,并将 xml 标题 : 添加到文件中。我似乎无法弄清楚这一点。
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))
我似乎无法让这段代码工作。任何帮助表示赞赏。
【问题讨论】:
-
它做什么或不做什么?
-
file_name已经是一个字符串。打电话str(file_name)没有意义。 -
“不工作”不是对问题的有用描述。请准确澄清问题。错误?不想要的结果?此外,
file_contents中显示的标记是 not XML,因为它没有根。因此,lxml在尝试解析时应该会出错。 -
@Parfait:根据您的说法,无法使用 lxml 库将我的 xml 包含在根元素中。我必须自己添加标签元素,例如 '
' + file_contents + ' ' -
同样,该标记是 not XML。根据定义,XML 是格式良好的(即,在其他规则中具有根)。检查该标记是如何生成的。它可以由字符串构建。请参阅:What's so bad about building XML with string concatenation? 考虑使用 DOM 库来构建 XML,例如 Python 的
lxml。