我正在try 使用python的minidom过滤一个XML文件.我希望根据地址是工作邮箱地址的标准返回邮箱地址列表(<;wd:Email_Address>;).我需要使用元素<;wd:id wd:type="Communication_Usage_Type_ID">;WORK<;/wd:ID>;来过滤邮箱地址.以下是该文件:
<?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:Email_Address_Data>
<wd:Email_Address>jsmith2222@gmail.com</wd:Email_Address>
<wd:Usage_Data wd:Public="0">
<wd:Type_Data wd:Primary="1">
<wd:Type_Reference>
<wd:ID wd:type="WID">000000000000000</wd:ID>
<wd:ID wd:type="Communication_Usage_Type_ID">HOME</wd:ID>
</wd:Type_Reference>
</wd:Type_Data>
</wd:Usage_Data>
<wd:Email_Reference>
<wd:ID wd:type="WID">99999999999999999999999</wd:ID>
<wd:ID wd:type="Email_ID">EMAIL_REFERENCE-3-3960</wd:ID>
</wd:Email_Reference>
<wd:ID>EMAIL_REFERENCE-3-3960</wd:ID>
</wd:Email_Address_Data>
<wd:Email_Address_Data>
<wd:Email_Address>jsmith@something.com</wd:Email_Address>
<wd:Usage_Data wd:Public="1">
<wd:Type_Data wd:Primary="1">
<wd:Type_Reference>
<wd:ID wd:type="WID">999999999999999999999999999</wd:ID>
<wd:ID wd:type="Communication_Usage_Type_ID">WORK</wd:ID>
</wd:Type_Reference>
</wd:Type_Data>
</wd:Usage_Data>
<wd:Email_Reference>
<wd:ID wd:type="WID">999999999999999999999999</wd:ID>
<wd:ID wd:type="Email_ID">EMAIL_REFERENCE-3-4017</wd:ID>
</wd:Email_Reference>
<wd:ID>EMAIL_REFERENCE-3-4017</wd:ID>
</wd:Email_Address_Data>
</wd:Personal_Data>
</wd:Worker_Data>
</wd:Worker>
</wd:Response_Data>
</wd:Get_Working_Response>
</env:Body>
</env:Envelope>
到目前为止,我已经能够获得一个包含用于工作的过滤的DOM元素的列表(工作元素).我认为我需要使用它以某种方式过滤文件并将结果放在一个列表(LNodesWithLevel2)中,该列表只包含工作邮箱的Email_Address_Data元素.一旦我有了这些元素,我应该能够获得EMAIL_ADDRESS的值.任何帮助都将不胜感激.我对使用其他库持开放态度,如果这更容易的话.以下是我目前掌握的情况:
xmlDoc = minidom.parse('XML_Example.xml')
workelements =[]
lNodesWithLevel1 = xmlDoc.getElementsByTagName('wd:ID')
for mynodes in lNodesWithLevel1:
if mynodes.firstChild.nodeValue == 'WORK':
workelements.append(mynodes)
lNodesWithLevel2 = [lNode for lNode in xmlDoc.getElementsByTagName('wd:Email_Address_Data')
if lNode.getElementsByTagName('wd:ID') == li]