xml - XML查询未返回预期结果

标签 xml xpath

给定以下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&amp;journey=Hotels&amp;checkinDate=11092017&amp;duration=7&amp;suppliers=TT2&amp;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&amp;journey=Hotels&amp;checkinDate=12092017&amp;duration=7&amp;suppliers=TT2&amp;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"的任何元素

关于xml - XML查询未返回预期结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42856902/

相关文章:

java - HtmlCleaner 在 XPather 生成的某些 xpath 上失败

python - 如何在selenium中获取当前选项卡的url?

xml - BaseX 上的 Xpath/Xquery 没有返回任何结果

html - 如何使用 Boost ptree C++ 解析其值中包含 HTML 标记的 XML

c++ - OpenCV C++ : How to write a list of string in xml file using OpenCV FileStorage?

php - xpath爆炸整数和比较值

java - 通过 XPath 仅选择叶 SPAN 元素

xml - 自定义 SOAP 1.1 header 和 mustUnderstand 属性

java - 解码 JAVA Web 服务中的嵌套或复杂数据元素

Android 启动器无法启动(检查我的 XML)