0
저는 XSLT에서 초보자입니다. XSLT를 사용하여 JDK 6을 통해 XML을 XML로 XML 변환합니다.XSLT 1.0 get node set
다음은 웹 서비스에서받은 소스 XML입니다.
소스 XML :
<Response>
<data>
<route type="OUTBOUND">
<Include>AA</Include>
<Include>BB</Include>
<Include>CC</Include>
</route>
<route type="INBOUND">
<Include>XX</Include>
<Include>YY</Include>
<Include>ZZ</Include>
</route>
</data>
<result>
<Flights type="OUTBOUND">
<Flight>
<Airline>AA</Airline>
</Flight>
<Flight>
<Airline>BB</Airline>
</Flight>
<Flight>
<Airline>CC</Airline>
</Flight>
<Flight>
<Airline>XX</Airline>
</Flight>
<Flight>
<Airline>YY</Airline>
</Flight>
<Flight>
<Airline>ZZ</Airline>
</Flight>
</Flights>
<Flights type="INBOUND">
<Flight>
<Airline>AA</Airline>
</Flight>
<Flight>
<Airline>BB</Airline>
</Flight>
<Flight>
<Airline>CC</Airline>
</Flight>
<Flight>
<Airline>XX</Airline>
</Flight>
<Flight>
<Airline>YY</Airline>
</Flight>
<Flight>
<Airline>ZZ</Airline>
</Flight>
</Flights>
</result>
</Response>
XSLT : 내가 소스 XML에 XSLT 이상 적용하면
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0" xmlns:exslt="http://exslt.org/common" exclude-result-prefixes="exslt">
<xsl:output method="xml" indent="yes" />
<xsl:template match="Response">
<xsl:element name="Result">
<xsl:apply-templates select="result/Flights"/>
</xsl:element>
</xsl:template>
<xsl:template match="Flights">
<xsl:variable name="PrefAirlines">
<xsl:choose>
<xsl:when test="current()/@type = 'OUTBOUND'">
<xsl:value-of select="//route[@type='OUTBOUND']/Include"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="//route[@type='INBOUND']/Include"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:apply-templates select="Flight[Airline=$PrefAirlines]"/>
</xsl:template>
<xsl:template match="Flight">
<xsl:element name="FilterFlight">
<xsl:value-of select="Airline"/>
</xsl:element>
</xsl:tempalte>
</xsl:stylesheet>
내가 출력 XML 다음 얻는다.
OutputXML :
<Result>
<FilterFlight>AA</FilterFlight>
<FilterFlight>XX</FilterFlight>
</Result>
예상 출력 :
<Result>
<FilterFlight>AA</FilterFlight>
<FilterFlight>BB</FilterFlight>
<FilterFlight>CC</FilterFlight>
<FilterFlight>XX</FilterFlight>
<FilterFlight>YY</FilterFlight>
<FilterFlight>ZZ</FilterFlight>
</Result>
문제 PrefAirlines
변수를 생성하는 로직 내에있다.
나는 아래 접근법을 시도했지만 예상 출력을 얻지 못했습니다.
<xsl:variable name="PrefAirlines">
<xsl:choose>
<xsl:when test="current()/@type = 'OUTBOUND'">
<xsl:value-of select="exslt:node-set(//route[@type='OUTBOUND']/Include)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="exslt:node-set(//route[@type='INBOUND']/Include)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
단일 값 대신 노드 집합을 사용할 수있는 함수가 있습니까? 도와주세요.
제안 해 주셔서 감사합니다. 그러나 XSLT 1.0을 사용해야하는 이유는이 기술을 변경해야한다는 것이 아니기 때문입니다. XSLT 1.0에 대한 몇 가지 해결책을 제안하십시오. –
죄송합니다. 한쪽 다리에서 뛰면서 북극에 접근하고 싶다면 흥미로운 도전이 될 수도 있지만 그렇지 않습니다. –