[英]How to read xml and get text from an element using lxml
我對從 xml 獲取信息有點困惑
我的 xml
<?xml version="1.0" encoding="UTF-8"?>
<AirShoppingRS Version="16.2" xsi:schemaLocation="http://www.iata.org/IATA/EDIST AirShoppingRS.xsd"
xmlns="http://www.iata.org/IATA/EDIST"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Document/>
<Success/>
<ShoppingResponseID>
<ResponseID>2017-10-04T14:35:25.243504</ResponseID>
</ShoppingResponseID>
<OffersGroup>
<AirlineOffers>
<TotalOfferQuantity>297</TotalOfferQuantity>
<Owner>SU</Owner>
<AirlineOffer>
<OfferID Owner="SU">OFFER5</OfferID>
<TotalPrice>
<SimpleCurrencyPrice Code="RUB">36229</SimpleCurrencyPrice>
</TotalPrice>
<PricedOffer>
<OfferPrice OfferItemID="5">
<RequestedDate>
<PriceDetail>
<TotalAmount>
<SimpleCurrencyPrice>36229</SimpleCurrencyPrice>
</TotalAmount>
<BaseAmount>33000</BaseAmount>
<Taxes>
<Total Code="RUB">3229</Total>
</Taxes>
</PriceDetail>
</RequestedDate>
<FareDetail>
<FareComponent>
<SegmentReference>SEG_SVOLED_1</SegmentReference>
<FareBasis>
<FareBasisCode>
<Code>DFOR</Code>
</FareBasisCode>
</FareBasis>
</FareComponent>
</FareDetail>
</OfferPrice>
</PricedOffer>
</AirlineOffer>
</AirlineOffers>
</OffersGroup>
</AirShoppingRS>
我如何使用lxml
庫讀取它。 我嘗試了這個root = etree.fromstring(xml.content)
然后我嘗試了airline_offers = root.findall("AirlineOffer")
,但什么也沒得到。 猜猜,我做錯了什么。 我哪里出錯了? 如何獲取元素,然后從中獲取文本或屬性?
更新: airline_offers = root.findall(".//AirlineOffer")
也沒有返回任何內容
默認命名空間 ( http://www.iata.org/IATA/EDIST
) 在根元素上聲明。 這是使其工作的一種方法:
airline_offers = root.findall(".//{http://www.iata.org/IATA/EDIST}AirlineOffer")
也可以使用通配符:
airline_offers = root.findall(".//{*}AirlineOffer")
另一種方法是定義一個前綴:
NS = {"edist": "http://www.iata.org/IATA/EDIST"}
airline_offers = root.findall(".//edist:AirlineOffer", namespaces=NS)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.