以字符串

时间:2016-05-12 07:53:26

标签: python xml soap

我从API获取xml SOAP响应。我正在使用“请求”库来访问API的URL。

SOAP响应:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
    <ns2:AvailabilityResponse xmlns:ns2="http://www.derbysoft.com/doorway" Status="Successful" Token="87348a9665ffc984abf37329">
        <ns2:Availabilities>
            <ns2:Availability CurrencyCode="USD" HotelCode="HY-CHIRC">
                <ns2:GuestCount AdultCount="1" ChildCount="0"/>
                <ns2:RoomTypes>
                    <ns2:RoomType RoomTypeCode="KING" RoomTypeName="1 King Bed">
                        <ns2:RoomTypeDescription>1 King Bed; 1 Grand Bed:Ihome Station:Large Plasma Tv:; Large Workdesk:Comp Gym</ns2:RoomTypeDescription>
                    </ns2:RoomType>
                    <ns2:RoomType RoomTypeCode="DLXK" RoomTypeName="High Floor King">
                        <ns2:RoomTypeDescription>High Floor King; Guaranteed High Floor-25th and Up:350 Sq Ft; 1 King Grand Bed:Oversized Workdesk:Free Wifi</ns2:RoomTypeDescription>
                    </ns2:RoomType>
                    <ns2:RoomType RoomTypeCode="VW1K" RoomTypeName="Premium View King">
                        <ns2:RoomTypeDescription>Premium View King; 1 King Bed:Ihome Station:Large Plasma Tv:; Large Workdesk:Comp Gym</ns2:RoomTypeDescription>
                    </ns2:RoomType>
                    <ns2:RoomType RoomTypeCode="CLBK" RoomTypeName="Regency Club King">
                        <ns2:RoomTypeDescription>Regency Club King; Comp Contl Breakfast:Hors D Oeuvres and Dessert:; Exclusive Club Lounge With View</ns2:RoomTypeDescription>
                    </ns2:RoomType>
                    <ns2:RoomType RoomTypeCode="QNQN" RoomTypeName="2 Queen Beds">
                        <ns2:RoomTypeDescription>2 Queen Beds; 2 Queen Grand Beds:Ihome Station:Plasma Tv:; Large Workdesk:Comp Gym</ns2:RoomTypeDescription>
                    </ns2:RoomType>
                    <ns2:RoomType RoomTypeCode="VW2Q" RoomTypeName="Premium View 2 Qen">
                        <ns2:RoomTypeDescription>Premium View 2 Qen; 2 Queen Beds:Ihome Station:Large Plasma Tv:; Large Workdesk:Comp Gym</ns2:RoomTypeDescription>
                    </ns2:RoomType>
                    <ns2:RoomType RoomTypeCode="JRSQ" RoomTypeName="Grand 2 Queens">
                        <ns2:RoomTypeDescription>Grand 2 Queens; Oversized Corner Room:2 Queen Beds:420 Sq Ft:; 2 Soft Chairs:Sml Table:Large Desk:Free Wifi</ns2:RoomTypeDescription>
                    </ns2:RoomType>
                    <ns2:RoomType RoomTypeCode="CLBD" RoomTypeName="Regency Club 2 Double Beds Bd">
                        <ns2:RoomTypeDescription>Regency Club 2 Double Beds Bd; Comp Contl Breakfast:Hors D Oeuvres and Dessert:; Exclusive Club Lounge With View</ns2:RoomTypeDescription>
                    </ns2:RoomType>
                    <ns2:RoomType RoomTypeCode="JRSK" RoomTypeName="Junior City View Suite">
                        <ns2:RoomTypeDescription>Junior City View Suite; Large Parlor With 1 King Bed Grand Bed:Sitting Area:; Oversize Couch:Large Desk:Plasma Tv</ns2:RoomTypeDescription>
                    </ns2:RoomType>
                    <ns2:RoomType RoomTypeCode="DLXD" RoomTypeName="High Fl 2 Double">
                        <ns2:RoomTypeDescription>High Fl 2 Double; Guaranteed High Floor-25th and Up:350 Sq Ft; 2 Double Beds:Oversized Workdesk:Free Wifi</ns2:RoomTypeDescription>
                    </ns2:RoomType>
                </ns2:RoomTypes>
                <ns2:RatePlans>
                    <ns2:RatePlan RatePlanCode="49584IPRTF" RatePlanName="Partner Rate">
                        <ns2:RatePlanDescription/>
                        <ns2:CancelPolicy NonRefundable="false">
                            <ns2:Description>CXL 24HRS PRIOR TO ARRIVAL TO AVOID 1NT PNLTY</ns2:Description>
                            <ns2:CancelPenalties>
                                <ns2:CancelPenalty MaxHoursBeforeCheckIn="24" MinHoursBeforeCheckIn="0" Nights="1" NoShow="false"/>
                                <ns2:CancelPenalty Nights="1" NoShow="true"/>
                            </ns2:CancelPenalties>
                        </ns2:CancelPolicy>
                    </ns2:RatePlan>
                    <ns2:RatePlan RatePlanCode="49584WPAWAF" RatePlanName="Bed And Breakfast">
                        <ns2:RatePlanDescription/>
                        <ns2:CancelPolicy NonRefundable="false">
                            <ns2:Description>CXL 24HRS PRIOR TO ARRIVAL TO AVOID 1NT PNLTY</ns2:Description>
                            <ns2:CancelPenalties>
                                <ns2:CancelPenalty MaxHoursBeforeCheckIn="24" MinHoursBeforeCheckIn="0" Nights="1" NoShow="false"/>
                                <ns2:CancelPenalty Nights="1" NoShow="true"/>
                            </ns2:CancelPenalties>
                        </ns2:CancelPolicy>
                    </ns2:RatePlan>
                </ns2:RatePlans>
                <ns2:RoomRates>
                    <ns2:RoomRate RatePlanCode="49584IPRTF" RoomTypeCode="KING">
                        <ns2:Rates>
                            <ns2:Rate AmountAfterTax="178.610" AmountBeforeTax="152.150" EffectiveDate="2016-05-13" ExpireDate="2016-05-14"/>
                        </ns2:Rates>
                    </ns2:RoomRate>
                    <ns2:RoomRate RatePlanCode="49584IPRTF" RoomTypeCode="DLXK">
                        <ns2:Rates>
                            <ns2:Rate AmountAfterTax="198.570" AmountBeforeTax="169.150" EffectiveDate="2016-05-13" ExpireDate="2016-05-14"/>
                        </ns2:Rates>
                    </ns2:RoomRate>
                    <ns2:RoomRate RatePlanCode="49584IPRTF" RoomTypeCode="VW1K">
                        <ns2:Rates>
                            <ns2:Rate AmountAfterTax="218.520" AmountBeforeTax="186.150" EffectiveDate="2016-05-13" ExpireDate="2016-05-14"/>
                        </ns2:Rates>
                    </ns2:RoomRate>
                    <ns2:RoomRate RatePlanCode="49584IPRTF" RoomTypeCode="CLBK">
                        <ns2:Rates>
                            <ns2:Rate AmountAfterTax="233.490" AmountBeforeTax="198.900" EffectiveDate="2016-05-13" ExpireDate="2016-05-14"/>
                        </ns2:Rates>
                    </ns2:RoomRate>
                    <ns2:RoomRate RatePlanCode="49584IPRTF" RoomTypeCode="QNQN">
                        <ns2:Rates>
                            <ns2:Rate AmountAfterTax="178.610" AmountBeforeTax="152.150" EffectiveDate="2016-05-13" ExpireDate="2016-05-14"/>
                        </ns2:Rates>
                    </ns2:RoomRate>
                    <ns2:RoomRate RatePlanCode="49584IPRTF" RoomTypeCode="VW2Q">
                        <ns2:Rates>
                            <ns2:Rate AmountAfterTax="218.520" AmountBeforeTax="186.150" EffectiveDate="2016-05-13" ExpireDate="2016-05-14"/>
                        </ns2:Rates>
                    </ns2:RoomRate>
                    <ns2:RoomRate RatePlanCode="49584IPRTF" RoomTypeCode="JRSQ">
                        <ns2:Rates>
                            <ns2:Rate AmountAfterTax="253.450" AmountBeforeTax="215.900" EffectiveDate="2016-05-13" ExpireDate="2016-05-14"/>
                        </ns2:Rates>
                    </ns2:RoomRate>
                    <ns2:RoomRate RatePlanCode="49584IPRTF" RoomTypeCode="CLBD">
                        <ns2:Rates>
                            <ns2:Rate AmountAfterTax="233.490" AmountBeforeTax="198.900" EffectiveDate="2016-05-13" ExpireDate="2016-05-14"/>
                        </ns2:Rates>
                    </ns2:RoomRate>
                    <ns2:RoomRate RatePlanCode="49584WPAWAF" RoomTypeCode="KING">
                        <ns2:Rates>
                            <ns2:Rate AmountAfterTax="208.540" AmountBeforeTax="177.650" EffectiveDate="2016-05-13" ExpireDate="2016-05-14"/>
                        </ns2:Rates>
                    </ns2:RoomRate>
                    <ns2:RoomRate RatePlanCode="49584WPAWAF" RoomTypeCode="DLXK">
                        <ns2:Rates>
                            <ns2:Rate AmountAfterTax="218.520" AmountBeforeTax="186.150" EffectiveDate="2016-05-13" ExpireDate="2016-05-14"/>
                        </ns2:Rates>
                    </ns2:RoomRate>
                    <ns2:RoomRate RatePlanCode="49584WPAWAF" RoomTypeCode="VW1K">
                        <ns2:Rates>
                            <ns2:Rate AmountAfterTax="238.480" AmountBeforeTax="203.150" EffectiveDate="2016-05-13" ExpireDate="2016-05-14"/>
                        </ns2:Rates>
                    </ns2:RoomRate>
                    <ns2:RoomRate RatePlanCode="49584WPAWAF" RoomTypeCode="JRSK">
                        <ns2:Rates>
                            <ns2:Rate AmountAfterTax="448.020" AmountBeforeTax="381.650" EffectiveDate="2016-05-13" ExpireDate="2016-05-14"/>
                        </ns2:Rates>
                    </ns2:RoomRate>
                    <ns2:RoomRate RatePlanCode="49584WPAWAF" RoomTypeCode="QNQN">
                        <ns2:Rates>
                            <ns2:Rate AmountAfterTax="198.570" AmountBeforeTax="169.150" EffectiveDate="2016-05-13" ExpireDate="2016-05-14"/>
                        </ns2:Rates>
                    </ns2:RoomRate>
                    <ns2:RoomRate RatePlanCode="49584WPAWAF" RoomTypeCode="DLXD">
                        <ns2:Rates>
                            <ns2:Rate AmountAfterTax="218.520" AmountBeforeTax="186.150" EffectiveDate="2016-05-13" ExpireDate="2016-05-14"/>
                        </ns2:Rates>
                    </ns2:RoomRate>
                    <ns2:RoomRate RatePlanCode="49584WPAWAF" RoomTypeCode="VW2Q">
                        <ns2:Rates>
                            <ns2:Rate AmountAfterTax="238.480" AmountBeforeTax="203.150" EffectiveDate="2016-05-13" ExpireDate="2016-05-14"/>
                        </ns2:Rates>
                    </ns2:RoomRate>
                    <ns2:RoomRate RatePlanCode="49584WPAWAF" RoomTypeCode="JRSQ">
                        <ns2:Rates>
                            <ns2:Rate AmountAfterTax="448.020" AmountBeforeTax="381.650" EffectiveDate="2016-05-13" ExpireDate="2016-05-14"/>
                        </ns2:Rates>
                    </ns2:RoomRate>
                </ns2:RoomRates>
            </ns2:Availability>
        </ns2:Availabilities>
    </ns2:AvailabilityResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

现在,我只想要与特定RatePlanCode相关的CancelPolicy。让我们说,我只想要RatePlanCode的“PickPolicy”49584WPAWAF然后它应该像这样返回,这个返回XML应该是字符串形式。

<ns2:CancelPolicy NonRefundable="false">
                            <ns2:Description>CXL 24HRS PRIOR TO ARRIVAL TO AVOID 1NT PNLTY</ns2:Description>
                            <ns2:CancelPenalties>
                                <ns2:CancelPenalty MaxHoursBeforeCheckIn="24" MinHoursBeforeCheckIn="0" Nights="1" NoShow="false"/>
                                <ns2:CancelPenalty Nights="1" NoShow="true"/>
                            </ns2:CancelPenalties>
                        </ns2:CancelPolicy>

我该如何解决这个问题。请不要提我可以使用的库。尝试使用该库提供解决方案。感谢

1 个答案:

答案 0 :(得分:2)

您可以使用以下XPath根据RatePlan属性值查找RatePlanCode,然后返回子元素CancelPolicy

//ns2:RatePlan[@RatePlanCode='49584WPAWAF']/ns2:CancelPolicy

您可以使用xml.etree执行XPath,或使用lxml *执行XPath,如下所示:

from lxml import etree

raw = '''your xml string here'''
root = etree.fromstring(raw)
ns = {'ns2': 'http://www.derbysoft.com/doorway'}
query = "//ns2:RatePlan[@RatePlanCode='49584WPAWAF']/ns2:CancelPolicy"
result = root.xpath(query, namespaces=ns)
print etree.tostring(result[0])