给定以下XML:
<?xml version="1.0" encoding="UTF-8"?>
<Accommodations>
<AccommodationSegment AccommodationCode="627|26234" AccommodationId="15390132" AccommodationName="blah" Availability="available" BasicAdultCost="180.16" BoardCode="SC" BookableByFAB="true" BrandName="blah" ClassCode="2*" Currency="GBP" EndDate="20170918" ItineraryId="si1068" MaxChildAge="17" NormalisedName="BLAH" NumNights="7" ResortId="558" ResortName="blah" StartDate="20170911" Supplier="TT2" SyndicatorRanking="100" Type="Apartments">
<AvailableBoardBasis>BB</AvailableBoardBasis>
<AvailableBoardBasis>HB</AvailableBoardBasis>
<AvailableBoardBasis>SC</AvailableBoardBasis>
<Address Address1="blah" Address2="blah" Address3="Tenerife" CityOrTown="Puerto de la Cruz" Country="ES" PostCode="34324" />
<TelephoneNumber>+34 922370565</TelephoneNumber>
<Description>blah blah blah blah blah blah blah blah blah blah blah blah
blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah</Description>
<GeoPosition Latitude="28.4129" Longitude="-16.5437" />
<DirectLink System="FABRIX">
<DirectLinkURL><![CDATA[https://ww9.website.com/deep_linking/deep_linking.html?rooms=1&journey=Hotels&checkinDate=11092017&duration=7&suppliers=TT2&accommodationId=15390132]]></DirectLinkURL>
</DirectLink>
<AccommodationUnits>
<AccommodationUnit AUID="H2" Code="2SC" MaxExtraChildren="0" MaxExtraInfants="0" MaxOccupancy="1" MinOccupancy="1" Name="Studio - Self catering" QuantityAvailable="9">
<RoomRate Amount="180.16" BoardBasis="SC" Currency="GBP" EndDate="20170918" RefundType="refundable" StartDate="20170911" />
</AccommodationUnit>
<AccommodationUnit AUID="H2" Code="2BB" MaxExtraChildren="0" MaxExtraInfants="0" MaxOccupancy="1" MinOccupancy="1" Name="Studio - Bed and Breakfast" QuantityAvailable="9">
<RoomRate Amount="216.91" BoardBasis="BB" Currency="GBP" EndDate="20170918" RefundType="refundable" StartDate="20170911" />
</AccommodationUnit>
<AccommodationUnit AUID="H2" Code="2HB" MaxExtraChildren="0" MaxExtraInfants="0" MaxOccupancy="1" MinOccupancy="1" Name="Studio - Half board" QuantityAvailable="9">
<RoomRate Amount="268.36" BoardBasis="HB" Currency="GBP" EndDate="20170918" RefundType="refundable" StartDate="20170911" />
</AccommodationUnit>
</AccommodationUnits>
</AccommodationSegment>
<AccommodationSegment AccommodationCode="627|26234" AccommodationId="15390132" AccommodationName="blah" Availability="available" BasicAdultCost="180.16" BoardCode="SC" BookableByFAB="true" BrandName="blah" ClassCode="2*" Currency="GBP" EndDate="20170918" ItineraryId="si1068" MaxChildAge="17" NormalisedName="BLAH" NumNights="7" ResortId="558" ResortName="blah" StartDate="20170911" Supplier="TT2" SyndicatorRanking="100" Type="Apartments">
<AvailableBoardBasis>BB</AvailableBoardBasis>
<AvailableBoardBasis>HB</AvailableBoardBasis>
<AvailableBoardBasis>SC</AvailableBoardBasis>
<Address Address1="blah" Address2="blah" Address3="Tenerife" CityOrTown="Puerto de la Cruz" Country="ES" PostCode="73737" />
<TelephoneNumber>0034 922384811</TelephoneNumber>
<Description>blah blah blah blah blah blah blah blah blah blah blah blah
blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah</Description>
<GeoPosition Latitude="28.4119" Longitude="-16.5473" />
<DirectLink System="FABRIX">
<DirectLinkURL><![CDATA[https://ww9.website.com/deep_linking/deep_linking.html?rooms=1&journey=Hotels&checkinDate=12092017&duration=7&suppliers=TT2&accommodationId=16271549]]></DirectLinkURL>
</DirectLink>
<AccommodationUnits>
<AccommodationUnit AUID="H4476" Code="4476BB" MaxExtraChildren="0" MaxExtraInfants="0" MaxOccupancy="1" MinOccupancy="1" Name="Double Room for Single Use - Bed and Breakfast" QuantityAvailable="9">
<RoomRate Amount="250.04" BoardBasis="BB" Currency="GBP" EndDate="20170919" RefundType="non_refundable" StartDate="20170912" />
</AccommodationUnit>
<AccommodationUnit AUID="H4476" Code="4476HB" MaxExtraChildren="0" MaxExtraInfants="0" MaxOccupancy="1" MinOccupancy="1" Name="Double Room for Single Use - Half board" QuantityAvailable="9">
<RoomRate Amount="276.97" BoardBasis="HB" Currency="GBP" EndDate="20170919" RefundType="non_refundable" StartDate="20170912" />
</AccommodationUnit>
<AccommodationUnit AUID="H4476" Code="4476FB" MaxExtraChildren="0" MaxExtraInfants="0" MaxOccupancy="1" MinOccupancy="1" Name="Double Room for Single Use - Full board" QuantityAvailable="9">
<RoomRate Amount="303.88" BoardBasis="FB" Currency="GBP" EndDate="20170919" RefundType="non_refundable" StartDate="20170912" />
</AccommodationUnit>
<AccommodationUnit AUID="H4476" Code="4476AI" MaxExtraChildren="0" MaxExtraInfants="0" MaxOccupancy="1" MinOccupancy="1" Name="Double Room for Single Use - All inclusive" QuantityAvailable="9">
<RoomRate Amount="317.34" BoardBasis="AI" Currency="GBP" EndDate="20170919" RefundType="non_refundable" StartDate="20170912" />
</AccommodationUnit>
</AccommodationUnits>
</AccommodationSegment>
</Accommodations>
和以下xpath查询:
(//*[local-name()="AccommodationSegment" and //*["RoomRate"][@RefundType="non_refundable"]])[1]
为什么查询会返回包含“可退款”房间的第一个(酒店)而不返回包含“不可退款”酒店的第二个酒店?查询出了什么问题和/或是否存在可以使用的查询?
最佳答案
您可以使用下面的XPath
表达式来匹配包含AccommodationSegment
的第一个<RoomRate RefundType="non_refundable">
元素:
(//AccommodationSegment[./descendant::RoomRate[@RefundType="non_refundable"]])[1]
或者您可以将
XPath
修改为(//*[local-name()="AccommodationSegment" and .//*[@RefundType="non_refundable"]])[1]
注意
我删除了
["RoomRate"]
谓词,因为字符串将始终返回True
我将
//*[@RefundType...
替换为.//*[@RefundType...
作为表达的意思查找名称为
"AccommodationSegment"
且文档中是否存在属性为RefundType="non_refundable"
的任何元素的任何元素而我的意思是:
查找名称为
"AccommodationSegment"
且元素包含属性RefundType="non_refundable"
的任何元素