Php 在python中使用正则表达式将XML表示转换为字典

Php 在python中使用正则表达式将XML表示转换为字典,php,python,regex,porting,Php,Python,Regex,Porting,我用python发送了一条基于的POST消息。完成后,我从网站上得到一个结果XML表示形式,如下所示: <status>Active</status> <registeredname>MyTestName</registeredname> <companyname>TEST</companyname> <email>mytestemail@gmail.com</email> <serviceid

我用python发送了一条基于的POST消息。完成后,我从网站上得到一个结果XML表示形式,如下所示:

<status>Active</status>
<registeredname>MyTestName</registeredname>
<companyname>TEST</companyname>
<email>mytestemail@gmail.com</email>
<serviceid>8</serviceid>
<productid>1</productid>
<productname>Some Test Product</productname>
<regdate>2013-08-06</regdate>
<nextduedate>0000-00-00</nextduedate>
<billingcycle>One Time</billingcycle>
<validdomain>testing</validdomain>
<validip>XX.XX.XXX.XX</validip>
<validdirectory>/root</validdirectory>
<configoptions></configoptions>
<customfields></customfields>
<addons></addons>
<md5hash>58z9f70a9d738a98b18d0bf4304ac0c6</md5hash>
我尝试从中移植的相应PHP代码如下所示:

preg_match_all('/<(.*?)>([^<]+)<\/\\1>/i', $data, $matches);

preg\u match\u all('/([^从正则表达式中删除前导/尾随
/
s。无需转义
/
。指定
标志=re.IGNORECASE
而不是尾随
i

matches = re.findall('<(.*?)>([^<]+)</\\1>', data, flags=re.IGNORECASE)
print(dict(matches))
两种代码都打印:

{'status': 'Active', 'companyname': 'TEST', ...}
非正则表达式替代:lxml 使用
lxml.html
代替
lxml.etree
,因为
数据不完整

import lxml.html
print({x.tag:x.text for x in lxml.html.fromstring(data)})

你真的不想用正则表达式来做这件事。这里有很多答案,说明了如何用一个像样的XML解析器来做这件事。顺便说一句,没有顶级XML标记吗?这是整个文档吗?是的。没有顶级XML标记。这是整个文档。所以我猜这不是一个XML文档。这些都打印了输出为字典。我如何将它们存储为字典?因为当我给出
打印匹配项时,我得到
[('status','Active'),('companyname','test'),…]
@I.h4d35,试试
结果=dict(matches)
。成功了。谢谢!!
matches = re.findall(r'<(.*?)>([^<]+)</\1>', data, flags=re.IGNORECASE)
print(dict(matches))
{'status': 'Active', 'companyname': 'TEST', ...}
import lxml.html
print({x.tag:x.text for x in lxml.html.fromstring(data)})