给定以下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的列表时,基于具有MultiLegOutboundFlight="true“属性的子元素true
我如何编写一个XmlPath来实现这一点?我正在使用RestAssurred,并且正在进行实验,但发现很难在网上找到用于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作为列表?
发布于 2018-06-29 13:30:56
这是父节点的Xpath,
//flight[@multilegoutboundflight='true']//parent::holiday您需要添加的是将检索内部属性的方法。就像传递getAttribute('ItineraryId')一样
发布于 2018-06-29 14:58:48
下面的片段可能对你有帮助。
String itineraryId = "";
XmlPath xmlpath = new XmlPath(responseXML);
if(xmlpath.getNode("Holiday").getNode("Flight").getAttribute("MultiLegOutboundFlight").equals("true")) {
itineraryId = xmlpath.getNode("Holiday").getAttribute("ItineraryId");
System.out.println("Itinerary ID ::: "+itineraryId);
}进口:
import com.jayway.restassured.path.xml.XmlPath;https://stackoverflow.com/questions/51102048
复制相似问题