[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Using sibling value in streaming mode
Am 30.08.2019 um 23:18 schrieb Martynas JuseviD ius martynas@xxxxxxxxxxxxx: Hi,
B B B <xsl:output indent="yes"/> B B B <xsl:mode streamable="yes" on-no-match="shallow-skip"/> B B B <xsl:template match="array/map"> B B B B B B B <items> B B B B B B B B B B B <xsl:iterate select="*"> B B B B B B B B B B B B B B B <xsl:param name="map-id" as="xs:string?" select="()"/> B B B B B B B B B B B B B B B <xsl:param name="values" as="tuple(key: xs:string, val: xs:string)*" select="()"/> B B B B B B B B B B B B B B B <xsl:variable name="current-value" as="tuple(key: xs:string, val: xs:string)" B B B B B B B B B B B B B B B B B B B select="map{ 'key' : string(@key), 'val' : string() }"/> B B B B B B B B B B B B B B B <xsl:variable name="found-id" as="xs:boolean" select="$current-value?key = 'id'"/> B B B B B B B B B B B B B B B <xsl:apply-templates B B B B B B B B B B B B B B B B B B B select=" B B B B B B B B B B B B B B B B B B B B B B B if ($found-id) B B B B B B B B B B B B B B B B B B B B B B B then B B B B B B B B B B B B B B B B B B B B B B B B B B B $values B B B B B B B B B B B B B B B B B B B B B B B else B B B B B B B B B B B B B B B B B B B B B B B B B B B ($values, $current-value)[$map-id]" B B B B B B B B B B B B B B B B B B B mode="item"> B B B B B B B B B B B B B B B B B B B <xsl:with-param name="map-id" B B B B B B B B B B B B B B B B B B B B B B B select=" B B B B B B B B B B B B B B B B B B B B B B B B B B B if ($found-id) B B B B B B B B B B B B B B B B B B B B B B B B B B B then B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B $current-value?val B B B B B B B B B B B B B B B B B B B B B B B B B B B else B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B $map-id" B B B B B B B B B B B B B B B B B B B /> B B B B B B B B B B B B B B B </xsl:apply-templates> B B B B B B B B B B B B B B B <xsl:next-iteration> B B B B B B B B B B B B B B B B B B B <xsl:with-param name="map-id" B B B B B B B B B B B B B B B B B B B B B B B select=" B B B B B B B B B B B B B B B B B B B B B B B B B B B if ($found-id) then B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B $current-value?val B B B B B B B B B B B B B B B B B B B B B B B B B B B else B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B $map-id"/> B B B B B B B B B B B B B B B B B B B <xsl:with-param name="values" B B B B B B B B B B B B B B B B B B B B B B B select=" B B B B B B B B B B B B B B B B B B B B B B B B B B B if ($found-id or $map-id) then B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B () B B B B B B B B B B B B B B B B B B B B B B B B B B B else B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B ($values, $current-value)" B B B B B B B B B B B B B B B B B B B /> B B B B B B B B B B B B B B B </xsl:next-iteration> B B B B B B B B B B B </xsl:iterate> B B B B B B B </items> B B B </xsl:template> B B B <xsl:template match=".[. instance of tuple(key: xs:string, val: xs:string)]" mode="item"> B B B B B B B <xsl:param name="map-id"/> B B B B B B B <item> B B B B B B B B B B B <id>{$map-id}</id> B B B B B B B B B B B <key>{?key}</key> B B B B B B B B B B B <val>{?val}</val> B B B B B B B </item> B B B </xsl:template> </xsl:stylesheet> Like the previous example it requires using the Saxon 9 EE specific syntax extension but you could of course use the same `xsl:iterate` approach to store and push normal maps or even `copy-of()`ed "string" elements.
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|