如何在lxml中将XML修改为文本

时间:2014-10-03 00:30:52

标签: python xml python-2.7 xml-parsing lxml

我有一个IDE生成的XML文件;然而,遗憾的是,输出带有换行符的代码作为BR,并且似乎随机决定在哪里放置换行符。例如:

if test = true
    foo;
    bar;
endif

在XML文件中成为以下XTML:

<body>
    <p>if test = true<br />    foo;<br />    bar;<br />endif
    </p>
</body>

我正在尝试使用lxml在python中为这些文件制作预处理器,以便更容易对它们进行版本控制。但是,我无法想象将XML修改为文本,以便我可以将每个BR放在它自己的行上,如下所示:

<body>
<p>if test = true
    <br />    foo;
    <br />    bar;
    <br />endif
</p>
</body>

如何将xml编辑为文本,或者如果失败,是否有其他方法可以获得上述结果?

1 个答案:

答案 0 :(得分:0)

一种选择是在p标记的文本和br标记尾部添加换行符。例如:

from lxml import html

data = """
<html>
<body>
<p>if test = true<br />    foo;<br />    bar;<br />endif
</p>
</body>
</html>
"""

tree = html.fromstring(data)

p = tree.find('.//p')
p.text += '\n'

for element in tree.xpath('.//br'):
    element.tail += '\n'

print html.tostring(tree)

打印:

<html>
<body>
<p>if test = true
<br>    foo;
<br>    bar;
<br>endif

</p>
</body>
</html>