Python 按名称获取xml标记中的文本
我有一个xml代码,我想使用python语言获取精确元素(xml标记)中的文本 我尝试了两种解决方案,但都没有成功Python 按名称获取xml标记中的文本,python,python-3.x,xml,xml.etree,Python,Python 3.x,Xml,Xml.etree,我有一个xml代码,我想使用python语言获取精确元素(xml标记)中的文本 我尝试了两种解决方案,但都没有成功 将xml.etree.ElementTree导入为ET tree=ET.fromstring(xml) 用于树中的节点。iter('Model'): 打印节点 我该怎么做 Xml代码: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xs
将xml.etree.ElementTree导入为ET
tree=ET.fromstring(xml)
用于树中的节点。iter('Model'):
打印节点
我该怎么做
Xml代码:
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetVehicleLimitedInfoResponse
xmlns="http://schemas.conversesolutions.com/xsd/dmticta/v1">
<return>
<ResponseMessage xsi:nil="true" />
<ErrorCode xsi:nil="true" />
<RequestId> 2012290007705 </RequestId>
<TransactionCharge>150</TransactionCharge>
<VehicleNumber>GF-0176</VehicleNumber>
<AbsoluteOwner>SIYAPATHA FINANCE PLC</AbsoluteOwner>
<EngineNo>GA15-483936F</EngineNo>
<ClassOfVehicle>MOTOR CAR</ClassOfVehicle>
<Make>NISSAN</Make>
<Model>PULSAR</Model>
<YearOfManufacture>1998</YearOfManufacture>
<NoOfSpecialConditions>0</NoOfSpecialConditions>
<SpecialConditions xsi:nil="true" />
</return>
</GetVehicleLimitedInfoResponse>
</soap:Body>
</soap:Envelope>
2012290007705
150
GF-0176
SIYAPATHA金融有限公司
GA15-483936F
汽车
日产
脉冲星
1998
0
经过编辑和改进的答案:
将xml.etree.ElementTree作为ET导入
进口稀土
ns={“veh”:”http://schemas.conversesolutions.com/xsd/dmticta/v1"}
tree=ET.parse('test.xml')#将xml另存为test.xml
root=tree.getroot()
def get_tag_名称(tag):
返回re.sub(r'\{.*\}','',标记)
对于root.find(“.//veh:return”,ns)中的节点:
打印(获取标签名称(node.tag)+':',node.text)
它应该产生这样的结果:
ResponseMessage: None
ErrorCode: None
RequestId: 2012290007705
TransactionCharge: 150
VehicleNumber: GF-0176
AbsoluteOwner: SIYAPATHA FINANCE PLC
EngineNo: GA15-483936F
ClassOfVehicle: MOTOR CAR
Make: NISSAN
Model: PULSAR
YearOfManufacture: 1998
NoOfSpecialConditions: 0
SpecialConditions: None
经编辑和改进的答案:
将xml.etree.ElementTree作为ET导入
进口稀土
ns={“veh”:”http://schemas.conversesolutions.com/xsd/dmticta/v1"}
tree=ET.parse('test.xml')#将xml另存为test.xml
root=tree.getroot()
def get_tag_名称(tag):
返回re.sub(r'\{.*\}','',标记)
对于root.find(“.//veh:return”,ns)中的节点:
打印(获取标签名称(node.tag)+':',node.text)
它应该产生这样的结果:
ResponseMessage: None
ErrorCode: None
RequestId: 2012290007705
TransactionCharge: 150
VehicleNumber: GF-0176
AbsoluteOwner: SIYAPATHA FINANCE PLC
EngineNo: GA15-483936F
ClassOfVehicle: MOTOR CAR
Make: NISSAN
Model: PULSAR
YearOfManufacture: 1998
NoOfSpecialConditions: 0
SpecialConditions: None
预期的产出究竟是多少?在您要查找的代码中,
条目
,但XML文档中没有此类元素。请尝试tree.iter()
。@mzjn示例:汽车我需要获取开始和结束标记之间的文本。在这种情况下,输出必须是电机CAR@GHOSTH4CK3R看看我发布的答案,你可以在循环中使用if语句过滤掉你想要的结果!预期的产出究竟是多少?在您要查找的代码中,条目
,但XML文档中没有此类元素。请尝试tree.iter()
。@mzjn示例:汽车我需要获取开始和结束标记之间的文本。在这种情况下,输出必须是电机CAR@GHOSTH4CK3R看看我发布的答案,你可以在循环中使用if语句过滤掉你想要的结果!我已经删除了我声称XML没有很好的名称空间的评论。我不是专家,如果别人觉得一切都很好,就这样吧。你并不真的需要这个功能;只需将最后一行更改为print(node.tag.split('}')[1],“:”,node.text)
。我已删除了声明XML名称空间不好的注释。我不是专家,如果别人觉得一切都很好,就这样吧。你并不真的需要这个功能;只需将最后一行更改为print(node.tag.split('}')[1],“:”,node.text)
。