Subject: [xsl] Using sibling value in streaming mode From: "Martynas Jusevičius martynas@xxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Fri, 30 Aug 2019 21:18:32 -0000 |
Hi, I've started looking into streaming recently (using Saxon 9.9). I have a use case like this: Input: <array> <map> <string key="key1">value1</string> ... <string key="id">123456789</string> ... <string key="keyN">valueN</string> </map> ... </array> Required output: <items> <item> <id>123456789</id> <key>key1<key> <val>value1</val> </item> ... <item> <id>123456789</id> <key>id<key> <val>123456789</val> </item> ... <item> <id>123456789</id> <key>keyN<key> <val>valueN</val> </item> ... </items> The value of <string key="id"> is used as <id> in <item> elements. The problem is that <string key="id"> can occur in any position in the <map>. I've tried using an accumulator such as <xsl:accumulator name="map-id" initial-value="()" streamable="yes" as="xs:string?"> <xsl:accumulator-rule match="/array/map/string[@key = 'id']/text()" select="string(.)"/> </xsl:accumulator> and then <item> <id><xsl:value-of select="accumulator-before('map-id')"/></id> ... </item> That worked partially -- only for sibling <string> elements that followed the <string key="id">. Which is not surprising. I've also tried accumulator-after('map-id') but got: XTSE3430: Template rule is not streamable * A call to accumulator-after() is consuming when there are no preceding consuming instructions Is it possible to have a streaming solution in this case? Martynas
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Aw: [xsl] Attributes disappear in X, Martin Honnen martin | Thread | Re: [xsl] Using sibling value in st, Martin Honnen martin |
Re: [xsl] Attributes disappear in X, Mark Giffin m1879@xx | Date | Re: [xsl] Using sibling value in st, Martin Honnen martin |
Month |