简体   繁体   English

使用正则表达式修复命名空间

[英]Fix namespace with regular expression

I have the following name spaces coming from a certain service我有来自某个服务的以下名称空间

<soapenv:Envelope xmlns:soapenv=http://schemas.xmlsoap.org/soap/envelope/ xmlns:soap=http://www.4cgroup.co.za/soapauth xmlns:gen=http://www.4cgroup.co.za/genericsoap>

Trying to parse this request I receive the following error尝试解析此请求我收到以下错误

xml.etree.ElementTree.ParseError: not well-formed xml.etree.ElementTree.ParseError:格式不正确

I noticed there is no "" on namespace value.我注意到命名空间值上没有"" How can I add them with regular expression如何使用正则表达式添加它们

Proper format正确的格式

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="http://www.4cgroup.co.za/soapauth" xmlns:gen="http://www.4cgroup.co.za/genericsoap">

Note double quotes注意双引号

Using regex:使用正则表达式:

import re
namespace = "<soapenv:Envelope xmlns:soapenv=http://schemas.xmlsoap.org/soap/envelope/ xmlns:soap=http://www.4cgroup.co.za/soapauth xmlns:gen=http://www.4cgroup.co.za/genericsoap>"

FIND_URL = re.compile(r"((?:(?:https?|ftp):\/\/)?[\w/\-?=%.]+\.[\w/\-?=%.]+)")

print(FIND_URL.sub(r'"\1"', namespace))

Output: Output:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="http://www.4cgroup.co.za/soapauth" xmlns:gen="http://www.4cgroup.co.za/genericsoap">

Note that the regex isn't perfect.请注意,正则表达式并不完美。 It works for this case but if the urls become more "unique" it may fail.它适用于这种情况,但如果 url 变得更加“独特”,它可能会失败。

Credit to this answer归功于这个答案

This regex seems to do the trick:这个正则表达式似乎可以解决问题:

import re
nsmap = "<soapenv:Envelope xmlns:soapenv=http://schemas.xmlsoap.org/soap/envelope/ xmlns:soap=http://www.4cgroup.co.za/soapauth xmlns:gen=http://www.4cgroup.co.za/genericsoap>"
nsmap = re.sub(r"(https?://.*?)(?=\sxmlns|>)", r'"\1"', nsmap)
print(nsmap)

Output: Output:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="http://www.4cgroup.co.za/soapauth" xmlns:gen="http://www.4cgroup.co.za/genericsoap">

Check it out online here .在这里在线查看。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM