簡體   English   中英

如何使用 lxml 讀取 xml 並從元素中獲取文本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM