Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 用正则表达式美化Beautifulsoup生成的xml_Regex_Xml_Python Requests_Markup_Pretty Print - Fatal编程技术网

Regex 用正则表达式美化Beautifulsoup生成的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

我试图获取有效的漂亮打印的xml,以便将其进一步传递给
请求

但是,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肯定是这样),因此您甚至不必首先使用自己的方法。当然,但是黑客攻击仍然存在,并且没有被替换,这里没有关于
请求的任何内容,所以应该删除相应的标记吗?