使用 Python Minidom 解析 XML 问题

问题描述 投票:0回答:1

我尝试使用 python 的 xml minidom 解析 XML 文件。我只想返回法定姓名数据 的名字 和姓氏 。我不想返回每条记录中 数据的名字或姓氏或任何第三名称数据。下面是我尝试解析的 XML 文件的示例。当然,这只是我需要从中检索这些数据的许多记录中的一个。

<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://schema.xmlsoap.org/soap/envelope/">
    <env:Body>
        <wd:Get_Working_Response xmlns:wd="urn:com.workway/bsvc"
                                 wd:version="v40.1">
            <wd:Request_Criteria>
                <wd:Transaction_Log_Criteria_Data>
                </wd:Transaction_Log_Criteria_Data>
                <wd:Field_And_Parameter_Criteria_Data>
                </wd:Field_And_Parameter_Criteria_Data>
                <wd:Eligibility_Criteria_Data>
                </wd:Eligibility_Criteria_Data>
            </wd:Request_Criteria>
            <wd:Response_Filter>
            </wd:Response_Filter>
            <wd:Response_Group>
            </wd:Response_Group>
            <wd:Response_Results>
            </wd:Response_Results>
            <wd:Response_Data>
                <wd:Worker>
                    <wd:Worker_Reference>
                        <wd:ID wd:type="WID">787878787878787</wd:ID>
                        <wd:ID wd:type="Employee_ID">123456</wd:ID>
                    </wd:Worker_Reference>
                    <wd:Worker_Descriptor>John Smith</wd:Worker_Descriptor>
                    <wd:Worker_Data>
                        <wd:Worker_ID>123456</wd:Worker_ID>
                        <wd:User_ID>jsmith</wd:User_ID>
                        <wd:Personal_Data>
                            <wd:Name_Data>
                                <wd:Legal_Name_Data>
                                    <wd:Name_Detail_Data wd:Formatted_Name="John J. Smith"
                                                         wd:Reporting_Name="John J. Smith">
                                        <wd:Country_Reference>
                                            <wd:ID wd:type="WID">89989898989989898</wd:ID>
                                            <wd:ID wd:type="ISO_3166-1_Alpha-2_Code">US</wd:ID>
                                            <wd:ID wd:type="ISO_3166-1_Alpha-3_Code">USA</wd:ID>
                                            <wd:ID wd:type="ISO_3166-1_Numeric-3_Code">000000</wd:ID>
                                        </wd:Country_Reference>
                                        <wd:First_Name>John</wd:First_Name>
                                        <wd:Middle_Name>J.</wd:Middle_Name>
                                        <wd:Last_Name>Smith</wd:Last_Name>
                                    </wd:Name_Detail_Data>
                                </wd:Legal_Name_Data>
                                <wd:Preferred_Name_Data>
                                    <wd:Name_Detail_Data wd:Formatted_Name="Johnny James Smith"
                                                         wd:Reporting_Name="Johnny James Smith">
                                        <wd:Country_Reference>
                                            <wd:ID wd:type="WID">89989898989989898</wd:ID>
                                            <wd:ID wd:type="ISO_3166-1_Alpha-2_Code">US</wd:ID>
                                            <wd:ID wd:type="ISO_3166-1_Alpha-3_Code">USA</wd:ID>
                                            <wd:ID wd:type="ISO_3166-1_Numeric-3_Code">000000</wd:ID>
                                        </wd:Country_Reference>
                                        <wd:First_Name>Johnny</wd:First_Name>
                                        <wd:Middle_Name>James</wd:Middle_Name>
                                        <wd:Last_Name>Smith</wd:Last_Name>
                                    </wd:Name_Detail_Data>
                                </wd:Preferred_Name_Data>
                                <wd:Additional_Name_Data>
                                    <wd:Name_Detail_Data wd:Formatted_Name="John J. Smith"
                                                         wd:Reporting_Name="John J. Smith">
                                        <wd:Country_Reference>
                                            <wd:ID wd:type="WID">89989898989989898</wd:ID>
                                            <wd:ID wd:type="ISO_3166-1_Alpha-2_Code">US</wd:ID>
                                            <wd:ID wd:type="ISO_3166-1_Alpha-3_Code">USA</wd:ID>
                                            <wd:ID wd:type="ISO_3166-1_Numeric-3_Code">840</wd:ID>
                                        </wd:Country_Reference>
                                        <wd:First_Name>John</wd:First_Name>
                                        <wd:Middle_Name>J.</wd:Middle_Name>
                                        <wd:Last_Name>Smith</wd:Last_Name>
                                    </wd:Name_Detail_Data>
                                    <wd:Name_Type_Reference>
                                        <wd:ID wd:type="WID">89989898989989898</wd:ID>
                                        <wd:ID wd:type="Additional_Name_Type_ID">Preferred</wd:ID>
                                    </wd:Name_Type_Reference>
                                </wd:Additional_Name_Data>
                            </wd:Name_Data>

到目前为止,我已经尝试了以下操作,但它返回每条记录的所有名字和姓氏数据。我如何指定

from xml.dom import minidom

doc = minidom.parse('myfile.xml')

firstlist =[]
lastlist=[]

first = doc.getElementsByTagName('wd:First_Name')
for name in first:
    first2 =name.firstChild.nodeValue
    firstlist.append(first2)

last = doc.getElementsByTagName('wd:Last_Name')
for lasts in last:
    last2 =lasts.firstChild.nodeValue
    lastlist.append(last2)

谢谢, 尼克

python xml minidom
1个回答
0
投票

您需要先提取合法名称,如下所示:

firstlist = []
lastlist = []

legal_names = doc.getElementsByTagName('wd:Legal_Name_Data')
for legal_name in legal_names:
    first = legal_name.getElementsByTagName('wd:First_Name')
    for name in first:
        first2 = name.firstChild.nodeValue
        firstlist.append(first2)

    last = legal_name.getElementsByTagName('wd:Last_Name')
    for lasts in last:
        last2 = lasts.firstChild.nodeValue
        lastlist.append(last2)
© www.soinside.com 2019 - 2024. All rights reserved.