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

时间:2019-01-18 06:57:54

标签: python xml lxml

我正在使用以下代码将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文件显示了解析器以某种方式将字符串文字格式化为更多的层次结构或结构,这是不必要的,而且比我在下面的图片中看到的多得多。 >

enter image description here

<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。

1 个答案:

答案 0 :(得分:1)

> dat_2 <- dat_1 %>% spread(key="variable",value="measurement") > dat_2 country year GDP pop 1 AFG 2010 0.9148060 0.9370754 2 AFG 2011 0.6417455 0.5190959 3 UK 2010 0.2861395 0.8304476 4 UK 2011 0.7365883 0.1346666 的值是单引号,多行三引号string。因为是单个字符串,所以每行开头的空白和每行末尾的换行符是字符串的一部分,这就是导致您看到格式问题的原因。

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

phrase

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