最近有遇到接口返回值是xml文件,想匹配标签内的文本,难道要把xml转其他格式???
不可能,以本人懒惰的本性,想让我多转一次都不可能
那只能使用正则匹配了
xml代码如下(代码不完整,没关系):
text = '''
<?xml version="1.0" encoding="utf-8"?>
<Response>
<SenderID> SenderID </SenderID>
<ServiceID>GZSVR_SC0006</ServiceID>
<Method>
<Name>GetDataResourceInfo</Name>
<Security Algorithm="">
</Security>
<Items>
<Item>
<Name>ID</Name>
<Value type="String">
<Data>1774</Data>
</Value>
</Item>
<Item>
<Name>Type</Name>
<Value type="String">
<Data>ATTR</Data>
</Value>
</Item>
<Item>
<Name>ResourceCode</Name>
<Value>
<Data>0101032400049</Data>
</Value>
</Item>
<Item>
<Name>ENNAME</Name>
<Value type="String">
<Data>G_DZK_XZQH</Data>
</Value>
</Item>
<Item>
<Name>DispName</Name>
<Value type="String">
<Data>户政地址库-行政区划</Data>
</Value>
</Item>
<Item>
<Name>Description</Name>
<Value type="String">
<Data>户政地址库-行政区划</Data>
</Value>
</Item>
<Item>
<Name>Fields</Name>
<Value type="object">
<Fields>
<Field type="string" prec="0101032400049" scale="0" length="50" DECODE="DE01115" DQCODE="" DICCODE="" CHNAME="系统编号-主键" CanQuery="0" extParam="空">SYSTEMID</Field>
<Field type="string" prec="0101032400049" scale="0" length="6" DECODE="" DQCODE="" DICCODE="" CHNAME="代码" CanQuery="1" extParam="空">DM</Field>
<Field type="string" prec="0101032400049" scale="0" length="6" DECODE="" DQCODE="" DICCODE="" CHNAME="父级代码" CanQuery="0" extParam="空">FJDM</Field>
<Field type="string" prec="0101032400049" scale="0" length="60" DECODE="DE00619" DQCODE="" DICCODE="" CHNAME="行政区划简称" CanQuery="1" extParam="空">MC</Field>
<Field type="string" prec="0101032400049" scale="0" length="40" DECODE="" DQCODE="" DICCODE="" CHNAME="拼音首字母" CanQuery="1" extParam="空">PY</Field>
<Field type="string" prec="0101032400049" scale="0" length="50" DECODE="DE00060" DQCODE="" DICCODE="" CHNA'''
需要匹配的文本:(框住的文本,圈住的是为了确认而已,不要在乎细节)
正则匹配代码:
import re
DataList = re.compile('<Data>(.*?)</Data>')
print(DataList.findall(text)[5])
NameList = re.compile('<Name>(.*)</Name>')
print(NameList.findall(text)[7])
r = re.compile("<Field .*?>(.*)</Field>")
for i in r.findall(text):
print(i)