I am new to XSLT.
Below is the source XML that I get. The Request tag contains FlightId , which is used to filter the Result tag.
XML source:
<Response> <Request> <RequestedFlights> <FlightId>2121</FlightId> <FlightId>2584</FlightId> </RequestedFlights> </Request> <Result> <Flights> <Flight> <Segments> <Segment> <Id>1</Id> <FlightNumber>2121</FlightNumber> </Segment> <Segment> <Id>2</Id> <FlightNumber>1121</FlightNumber> </Segment> </Segments> </Flight> <Flight> <Segments> <Segment> <Id>3</Id> <FlightNumber>2121</FlightNumber> </Segment> <Segment> <Id>4</Id> <FlightNumber>2584</FlightNumber> </Segment> </Segments> </Flight> <Flight> <Segments> <Segment> <Id>5</Id> <FlightNumber>2121</FlightNumber> </Segment> <Segment> <Id>6</Id> <FlightNumber>2584</FlightNumber> </Segment> <Segment> <Id>7</Id> <FlightNumber>2023</FlightNumber> </Segment> </Segments> </Flight> </Flights> </Result> </Response>
XSLT:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" indent="yes" /> <xsl:variable name="ReqFlights" select="//Request/RequestedFlights/FlightId" /> <xsl:variable name="FilterFlights" select="//Result/Flights/Flight[Segments/Segment/FlightNumber=$ReqFlights]"/> <xsl:template match="Response"> <FilterResult> <ResultCount> <xsl:value-of select="count($FilterFlights)"/> </ResultCount> <xsl:copy> <xsl:copy-of select="$FilterFlights"/> </xsl:copy> </FilterResult> </xsl:template> </xsl:stylesheet>
I got below output using the above XSLT.
Output:
<FilterResult> <ResultCount>3</ResultCount> <Response> <Flight> <Segments> <Segment> <Id>1</Id> <FlightNumber>2121</FlightNumber> </Segment> <Segment> <Id>2</Id> <FlightNumber>1121</FlightNumber> </Segment> </Segments> </Flight> <Flight> <Segments> <Segment> <Id>3</Id> <FlightNumber>2121</FlightNumber> </Segment> <Segment> <Id>4</Id> <FlightNumber>2584</FlightNumber> </Segment> </Segments> </Flight> <Flight> <Segments> <Segment> <Id>5</Id> <FlightNumber>2121</FlightNumber> </Segment> <Segment> <Id>6</Id> <FlightNumber>2584</FlightNumber> </Segment> <Segment> <Id>7</Id> <FlightNumber>2023</FlightNumber> </Segment> </Segments> </Flight> </Response> </FilterResult>
I would like to get a lower conclusion.
Expected Result:
<FilterResult> <ResultCount>1</ResultCount> <Response> <Flight> <Segments> <Segment> <Id>3</Id> <FlightNumber>2121</FlightNumber> </Segment> <Segment> <Id>4</Id> <FlightNumber>2584</FlightNumber> </Segment> </Segments> </Flight> </Response> </FilterResult>
Please help me. How to use an array to filter the response and get the expected result. Thanks.
source share