繁体   English   中英

写入文件的xml字符串文字格式错误

[英]xml string literal written to file is wrongly formatted

我正在使用以下代码将xml字符串文字写入xml文件。

from lxml import etree
parser = etree.XMLParser(remove_blank_text=True)
tree = etree.parse("test.xml", parser)
root = tree.getroot()
phrase = '''
    <d:entry xmlns:d="http://www.apple.com/DTDs/DictionaryService-1.0.rng" id="test" d:title="test">
    <d:index d:value="test" d:title="test"/><d:index d:value="test2" d:title="test2"/>
    <div class="ODECN"><div class="extras"><div class="phrase"><span class="word_title"><i>test</i></span>: <p>test <a></a>test</p> </div><p class="ref">See main entry:<a href="x-dictionary:d:test">test</a></p></div></div>
    </d:entry>'''
b = etree.fromstring(phrase)
root.insert(0, b)
tree.write("newtest.xml", xml_declaration=True, encoding='utf-8', pretty_print=False)

我希望将xml字符串文字原样输出到文件,即4行,如下所示:

<d:entry xmlns:d="http://www.apple.com/DTDs/DictionaryService-1.0.rng" id="{}" d:title="{}">
    <d:index d:value="{}" d:title="{}"/><d:index d:value="{}" d:title="{}"/>
    <div class="ODECN"><div class="extras"><div class="phrase"><span class="word_title"><i>{}</i></span>: {}{}</div><p class="ref">See main entry:<a href="x-dictionary:d:{}">{}</a></p></div></div>
</d:entry>

但是生成的xml文件显示了解析器以某种方式将字符串文字格式化为更多的层次结构或结构,这是不必要的,而且比我预期的多得多,如下图所示。

在此处输入图片说明

<d:entry也在错误的位置,它应该以一行开头开始。

我试过将此解析器添加到etree

etree.XMLParser(remove_blank_text=True)

但这根本没有帮助。 我不知道是否还有其他设置无法使它起作用。 有人熟悉吗?

非常感谢任何输入。

这是test.xml文件的内容:

<?xml version="1.0" encoding="utf-8"?>
<d:dictionary xmlns:d="http://www.apple.com/DTDs/DictionaryService-1.0.rng">
<d:entry id="test0" d:title="test0">
<d:index d:value="test0" d:title="test0"/><d:index d:value="test00" d:title="test00"/>
<div class="ODECN"><div class="extras"><div class="phrase"><span class="word_title"><i>test</i></span>: <p>test <a></a>test</p> </div><p class="ref">See main entry:<a href="x-dictionary:d:test">test</a></p></div></div>
</d:entry>
</d:dictionary>

我正在使用Python 3.7和lxml。

phrase的值是一个单行,多行,三引号字符串 因为是单个字符串,所以每行开头的空白和每行末尾的换行符是字符串的一部分,这就是导致您看到格式问题的原因。

最简单的解决方案是利用Python自动连接连续字符串的事实。 phrase的值括在方括号中,并在每行三引号。

phrase = ("""<d:entry xmlns:d="http://www.apple.com/DTDs/DictionaryService-1.0.rng" id="test" d:title="test">
          """<d:index d:value="test" d:title="test"/><d:index d:value="test2" d:title="test2"/>"""
          """<div class="ODECN"><div class="extras"><div class="phrase"><span class="word_title"><i>test</i></span>:
          """</d:entry>""")

这将消除生成的xml文件中的前导空格和换行符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM