所以我正在尝试解析我从Skyscanner获取的XML文件,但我遇到了一个问题。我正在使用SAX来解析这个东西,因为它对这个大小的文档(大约5000行)更有效。但是,出现了一个问题。下面是我得到的XML的非常简洁的样本。
<BrowseQuotesResponseAPIDto xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Currencies>
<CurrencyDto>
<Code>GBP</Code>
<Symbol>£</Symbol>
<ThousandsSeparator>,</ThousandsSeparator>
<DecimalSeparator>.</DecimalSeparator>
<SymbolOnLeft>true</SymbolOnLeft>
<SpaceBetweenAmountAndSymbol>false</SpaceBetweenAmountAndSymbol>
<RoundingCoefficient>0</RoundingCoefficient>
<DecimalDigits>2</DecimalDigits>
</CurrencyDto>
</Currencies>
<Quotes>
<QuoteDto>
<QuoteId>1</QuoteId>
<MinPrice>398</MinPrice>
<Direct>true</Direct>
<OutboundLeg>
<CarrierIds>
<int>1523</int>
</CarrierIds>
<OriginId>43141</OriginId>
<DestinationId>88773</DestinationId>
<DepartureDate>2015-07-15T00:00:00</DepartureDate>
</OutboundLeg>
<InboundLeg>
<CarrierIds>
<int>1523</int>
</CarrierIds>
<OriginId>88773</OriginId>
<DestinationId>43141</DestinationId>
<DepartureDate>2015-07-15T00:00:00</DepartureDate>
</InboundLeg>
</QuoteDto>
<!-- Many more -->
</Quotes>
<Places>
<PlaceDto>
<PlaceId>837</PlaceId>
<Name>United Arab Emirates</Name>
<Type>Country</Type>
</PlaceDto>
<!-- Many more countries -->
<PlaceDto>
<PlaceId>40146</PlaceId>
<IataCode>ADB</IataCode>
<Name>Izmir</Name>
<Type>Station</Type>
<CityName>Izmir</CityName>
<CityId>IZMI</CityId>
<CountryName>Turkey</CountryName>
</PlaceDto>
<!-- Many more stations -->
<PlaceDto>
<PlaceId>3169460</PlaceId>
<IataCode>LON</IataCode>
<Name>London</Name>
<Type>City</Type>
<CityName>London</CityName>
<CityId>LOND</CityId>
</PlaceDto>
<!-- Many more cities -->
</Places>
<Carriers>
<CarriersDto>
<CarrierId>144</CarrierId>
<Name>Corendon</Name>
</CarriersDto>
<!-- Many more carriers -->
</Carriers>
如您所见,<PlaceDto>
和<CarrierDto>
都有<Name>
标记。因此,当我使用switch case结束名称标记时,我不确定是否应将<Name>
的值设置为<Name>
或<CarrierDto>
的{{1}}值<PlaceDto>
...
由于这来自SkyScanner,我无法自行更改实际标签,并尝试根据位置替换缓存内容中的标签,这似乎是一种非常低效的方式。
有没有解决这个问题的常见做法?