Regex 用正则表达式美化Beautifulsoup生成的xml
我试图获取有效的漂亮打印的xml,以便将其进一步传递给Regex 用正则表达式美化Beautifulsoup生成的xml,regex,xml,python-requests,markup,pretty-print,Regex,Xml,Python Requests,Markup,Pretty Print,我试图获取有效的漂亮打印的xml,以便将其进一步传递给请求 但是,BeautifulSoup“美化”的xml如下所示: ... <typ> TYPE_1 </typ> <rte> AL38941XXXXX </rte> <sts> ADDED </sts> ... text_re = re.compile('>\n\s+([^<>\s].*?)\n\s+</', re.DOT
请求
但是,BeautifulSoup“美化”的xml如下所示:
...
<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).replace('>\n ', '><').replace('>\n ', '><')
<sts>
<![CDATA[
</sts>
]]>
</sts>
所有的“漂亮”标记都消失了。。。
它有点工作,但如何正确地完成呢?如评论所示,不要费心美化输出 如果出于调试目的,您想要修饰,并且需要依靠BeautifulSoup完成该任务+额外的“修复”文本节点步骤,则可以尝试使用以下正则表达式:
(]+)>)\s+(?:([\s\s]*?)\s+)??()
替换为:$1$3$4
但是,请记住,正则表达式可能不是用于此目的的正确工具。事实证明,以前的正则表达式在CDATA内容中会失败,如下所示:
...
<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).replace('>\n ', '><').replace('>\n ', '><')
<sts>
<![CDATA[
</sts>
]]>
</sts>
]]>
当然,我们可以对正则表达式进行微调,以考虑CDATA部分,但即使如此,也很可能会出现其他问题。因此,最好使用XML解析器。或者最好使用一些XML美化器,不允许更改文本节点。我想在你链接的问题上,有几条建议。
你真的需要预先确认吗。。。如果您只是将它发送到另一个系统-这不重要-XML就是XML。。。您能否详细说明一下,然后请求尝试使用空标记中的“”参数运行查询,是什么导致了不正确的查询结果。-我不明白为什么请求
应该关心这些事情-它只是按照它看到的方式传输数据-而不是尝试解析数据。。。那里如何使用请求
呢?同意,XML是XML,但如果在调试时能让人可读,那就太好了,不是吗?从请求开始
-添加了一些详细信息,以便提供有关问题的更多(可能详尽)信息确保。。。但是当你想要调试信息的时候,通常会美化它。不一定是为了传输…?你已经从一个包含很多好例子的线程中挑选了一个“处理这个问题的简便方法”的非常糟糕的例子。既然您询问如何正确地做到这一点:您应该从永远不要在XML上使用正则表达式开始。不用于值提取,也不用于漂亮的打印。使用XML解析器。许多解析器都内置了非常好的打印支持(lxml肯定是这样),因此您甚至不必首先使用自己的方法。当然,但是黑客攻击仍然存在,并且没有被替换,这里没有关于请求的任何内容,所以应该删除相应的标记吗?