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代码,我想使用python语言获取精确元素(xml标记)中的文本

我尝试了两种解决方案,但都没有成功

将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)