I am trying to parse the SOAP xml answer from the server using lxml. I am struggling to get the details of one child element, instead of all of them.
The response from the server is like this:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetAllCompletedScansBasicResponse xmlns="urn:com:spidynamics:webservices:Amp">
<GetAllCompletedScansBasicResult>
<ScanBasic>
<ID>guid</ID>
<Name>string</Name>
<ProductType>string</ProductType>
<AppType>string</AppType>
<AppSubtype>string</AppSubtype>
<AppVersion>string</AppVersion>
<CreationTime>dateTime</CreationTime>
<State>Pending or Running or Suspended or Complete or Failed or Aborted or Offline or Suspended_Manual or Imported or FailedImport or Starting or Suspending or Resuming or Aborting or Importing or Archive_Pending or Archived or Archiving or Deleting or RestorePending or Restoring or FailedRestore or FailedArchive or Not_Started or Blackout_Pending or Blackout_Suspended or Blackout_Suspending or Blackout_Aborted or Suspending_Manual or Unknown</State>
<StartUri>string</StartUri>
<PolicyID>guid</PolicyID>
<PolicyName>string</PolicyName>
<CreatorUserName>string</CreatorUserName>
<CreatorUserSidString>string</CreatorUserSidString>
<ScanStartTime>dateTime</ScanStartTime>
<ScanEndTime>dateTime</ScanEndTime>
<SensorID>guid</SensorID>
<SensorName>string</SensorName>
<Priority>short</Priority>
<ResultsState>New or Partial or Complete or Imported or FailedImport or Unavailable</ResultsState>
<VulnCounts>
<CriticalCount>int</CriticalCount>
<HighCount>int</HighCount>
<MediumCount>int</MediumCount>
<LowCount>int</LowCount>
<BPCount>int</BPCount>
<InfoCount>int</InfoCount>
<RiskLevelScore>decimal</RiskLevelScore>
</VulnCounts>
<SiteID>guid</SiteID>
<SiteName>string</SiteName>
<ScanType>string</ScanType>
<UseAnySensor>boolean</UseAnySensor>
<AnalysisType>None or Dynamic or Static or RuntimePTA</AnalysisType>
<AnalysisSubType>None or WebSite or WebService</AnalysisSubType>
<PublishedState>Unpublished or Published or Publishing or PublishFailed or Processing or ProcessFailed</PublishedState>
<PublishedDate>dateTime</PublishedDate>
<ParentScanID>guid</ParentScanID>
<ChildScanType>None or Retest or BulkRetest</ChildScanType>
<AutoArchiveExclude>boolean</AutoArchiveExclude>
<DefaultEncoding>string</DefaultEncoding>
<EffectiveRights>unsignedInt</EffectiveRights>
<Project>guid</Project>
<ProjectName>string</ProjectName>
<Organization>guid</Organization>
<OrganizationName>string</OrganizationName>
</ScanBasic>
<ScanBasic>
<ID>guid</ID>
<Name>string</Name>
<ProductType>string</ProductType>
<AppType>string</AppType>
<AppSubtype>string</AppSubtype>
<AppVersion>string</AppVersion>
<CreationTime>dateTime</CreationTime>
<State>Pending or Running or Suspended or Complete or Failed or Aborted or Offline or Suspended_Manual or Imported or FailedImport or Starting or Suspending or Resuming or Aborting or Importing or Archive_Pending or Archived or Archiving or Deleting or RestorePending or Restoring or FailedRestore or FailedArchive or Not_Started or Blackout_Pending or Blackout_Suspended or Blackout_Suspending or Blackout_Aborted or Suspending_Manual or Unknown</State>
<StartUri>string</StartUri>
<PolicyID>guid</PolicyID>
<PolicyName>string</PolicyName>
<CreatorUserName>string</CreatorUserName>
<CreatorUserSidString>string</CreatorUserSidString>
<ScanStartTime>dateTime</ScanStartTime>
<ScanEndTime>dateTime</ScanEndTime>
<SensorID>guid</SensorID>
<SensorName>string</SensorName>
<Priority>short</Priority>
<ResultsState>New or Partial or Complete or Imported or FailedImport or Unavailable</ResultsState>
<VulnCounts>
<CriticalCount>int</CriticalCount>
<HighCount>int</HighCount>
<MediumCount>int</MediumCount>
<LowCount>int</LowCount>
<BPCount>int</BPCount>
<InfoCount>int</InfoCount>
<RiskLevelScore>decimal</RiskLevelScore>
</VulnCounts>
<SiteID>guid</SiteID>
<SiteName>string</SiteName>
<ScanType>string</ScanType>
<UseAnySensor>boolean</UseAnySensor>
<AnalysisType>None or Dynamic or Static or RuntimePTA</AnalysisType>
<AnalysisSubType>None or WebSite or WebService</AnalysisSubType>
<PublishedState>Unpublished or Published or Publishing or PublishFailed or Processing or ProcessFailed</PublishedState>
<PublishedDate>dateTime</PublishedDate>
<ParentScanID>guid</ParentScanID>
<ChildScanType>None or Retest or BulkRetest</ChildScanType>
<AutoArchiveExclude>boolean</AutoArchiveExclude>
<DefaultEncoding>string</DefaultEncoding>
<EffectiveRights>unsignedInt</EffectiveRights>
<Project>guid</Project>
<ProjectName>string</ProjectName>
<Organization>guid</Organization>
<OrganizationName>string</OrganizationName>
</ScanBasic>
</GetAllCompletedScansBasicResult>
</GetAllCompletedScansBasicResponse>
</soap:Body>
</soap:Envelope>
I would need to parse and get the information of one <ScanBasic> element, which matches the stated <ID>.
How that could be achieved?
Thanks a lot!
Update:
I solved it myself. Turns out you just make a dict with findall.
thanks guys for putting this on hold.
ScanList = sample_response.findall('.//{urn:com:spidynamics:webservices:Amp}ScanBasic')
for element in ScanList:
ID = element.find('.//{urn:com:spidynamics:webservices:Amp}ID')
if ID.text == "111111":
for sub_element in element:
print sub_element.text
Aucun commentaire:
Enregistrer un commentaire