0
我是XSLT的初學者。我正在使用XSLT通過JDK 6將XML轉換爲XML。XSLT 1.0獲取節點集
以下是我從Web服務收到的源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 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>
當我上面的XSLT適用於源XML我獲得以下輸出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建議一些解決方案。 –
對不起,如果您想通過一條腿跳到達北極,您可能會發現這是一個有趣的挑戰,但我沒有。 –