С учетом следующего фрагмента XML:
<Holiday ItineraryId="123456789" Country="ES" NumberOfNights="7" LeadInPricePerPassenger="447.3" FlightOnly="true" OneWayOnly="false" Currency="GBP" BookingChannel="WEB" PassengerIdRequired="false" PassengerIdMandatory="false" NationalityRequired="false" NationalityMandatory="false">
<Flight OriginAirport="LGW" DestinationAirport="ALC" MultiLegOutboundFlight="true">
<OutboundSubSegments DeparturePoint="LGW" DepartureDate="20180802" DepartureTime="0920" ArrivalPoint="OSL" ArrivalDate="20180802" ArrivalTime="1225" OperatingCarrier="DY" OperatedBy="Super Air Shuttle" FlightNumber="HY637" OriginAirportName="London Gatwick" DestinationAirportName="Oslo" />
</Flight>
</Holiday>
<Holiday ItineraryId="9283873737" Country="ES" NumberOfNights="7" LeadInPricePerPassenger="447.3" FlightOnly="true" OneWayOnly="false" Currency="GBP" BookingChannel="WEB" PassengerIdRequired="false" PassengerIdMandatory="false" NationalityRequired="false" NationalityMandatory="false">
<Flight OriginAirport="LGW" DestinationAirport="ALC" MultiLegOutboundFlight="true">
<OutboundSubSegments DeparturePoint="LGW" DepartureDate="20180802" DepartureTime="0920" ArrivalPoint="OSL" ArrivalDate="20180802" ArrivalTime="1225" OperatingCarrier="DY" OperatedBy="Super Air Shuttle" FlightNumber="HY637" OriginAirportName="London Gatwick" DestinationAirportName="Oslo" />
</Flight>
</Holiday>
<Holiday ItineraryId="894847463" Country="ES" NumberOfNights="7" LeadInPricePerPassenger="447.3" FlightOnly="true" OneWayOnly="false" Currency="GBP" BookingChannel="WEB" PassengerIdRequired="false" PassengerIdMandatory="false" NationalityRequired="false" NationalityMandatory="false">
<Flight OriginAirport="LGW" DestinationAirport="ALC" MultiLegOutboundFlight="true">
<OutboundSubSegments DeparturePoint="LGW" DepartureDate="20180802" DepartureTime="0920" ArrivalPoint="OSL" ArrivalDate="20180802" ArrivalTime="1225" OperatingCarrier="DY" OperatedBy="Super Air Shuttle" FlightNumber="HY637" OriginAirportName="London Gatwick" DestinationAirportName="Oslo" />
</Flight>
</Holiday>
Когда мне нужно извлечь Список всех ItineraryIds на основе дочернего элемента Flight, имеющего атрибут MultiLegOutboundFlight = "true"
Как мне написать XmlPath для достижения этой цели? Я использую RestAssoured и экспериментирую, но мне трудно найти ресурсы в Интернете для синтаксиса XmlPath, поэтому я проваливаюсь вслепую:
Если я сделаю следующее:
public List<String> getMultiLegFlightItineraryIdList() {
XmlPath xmlPath = new XmlPath(response.asString()); if(xmlPath.getNode("Holiday.Flight").getAttribute("MultiLegOutboundFlight").equals("true")) {
String itineraryId = xmlPath.getNode("Holiday").getAttribute("ItineraryId");
System.out.println(itineraryId);
}
return itineraryIDList;
}
Тогда я получаю следующую ошибку:
[Fatal Error] :2:802: The markup in the document following the root element must be well-formed.
ERROR: 'The markup in the document following the root element must be well-formed.'
java.lang.IllegalArgumentException: Failed to convert XML to Java Object. If
you're trying convert to a list then use the getList method instead.
Первоначально у меня было следующее:
allMultiLegPackages = response.xmlPath().getList("Holiday.Flight.findAll{it.@MultiLegOutboundFlight=='true'}//parent::Holiday");
Возвращает список всех праздников, в которых выполняется условие, но как получить атрибуты ItineraryID в качестве списка?