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
的值是单行、多行、三引号 string。由于它是单个字符串,每行开头的空格和每行末尾的换行符都是字符串的一部分,这就是导致您看到的格式问题的原因。
最简单的解决方案是利用 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 文件中删除前导空格和换行符。
我正在使用以下代码将 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
的值是单行、多行、三引号 string。由于它是单个字符串,每行开头的空格和每行末尾的换行符都是字符串的一部分,这就是导致您看到的格式问题的原因。
最简单的解决方案是利用 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 文件中删除前导空格和换行符。