我正在尝试获取有效的漂亮打印xml,以便将其进一步传递给Ticks and Frames: 60
(should be "Saving...Did delete file:
true/false")
但是,BeautifulSoup“修饰”的xml看起来像这样:
requests
描述这样混乱的输出的简便方法,here
...
<typ>
TYPE_1
</typ>
<rte>
AL38941XXXXX
</rte>
<sts>
ADDED
</sts>
...
给出:
text_re = re.compile('>\n\s+([^<>\s].*?)\n\s+</', re.DOTALL)
prettyXml = text_re.sub('>\g<1></', uglyXml)
但是,当涉及到空值时,正则表达式只是跳过它们,当解析的字符串中的某些值为空时,这会导致问题。
示例:
<typ>TYPE_1</typ>
<rte>AL38941XXXXX</rte>
<sts>ADDED</sts>
然后 <typ>TYPE_1</typ>
<rte>AL38941XXXXX</rte>
<sts>ADDED</sts>
<ref>
</ref>
尝试在空标记中使用参数requests
运行查询,这将导致错误的查询结果。
我对regex并不是很流利,所以尝试在另一个regex中' '
失败了并像这样黑了:
>\n\s+</
所有“漂亮”标记都不幸消失了... 可以,但是应该如何正确完成呢?
答案 0 :(得分:0)
从评论中可以看出,不要打扰美化输出。
如果出于调试目的,您想美化并且需要依靠BeautifulSoup来完成此任务,并且需要额外的步骤来“固定”文本节点,则可以尝试使用此正则表达式:
table
替换为:(<([^\/>]+)>)\s+(?:([\s\S]*?)\s+)??(<\/\2>)
但是,请记住,正则表达式可能不是正确的工具。证明是以前的正则表达式将因以下CDATA内容而失败:
$1$3$4
当然,我们可以对正则表达式进行微调以考虑CDATA节,但是即使这样,也可能会出现其他问题。因此,最好使用XML解析器。甚至更好地使用一些XML修饰符,以允许不更改文本节点。我认为在您链接的SO问题上,有一些建议。