Re: [xsl] creating a temporary document from multiple inputs

Subject: Re: [xsl] creating a temporary document from multiple inputs
From: Wolfgang Laun <wolfgang.laun@xxxxxxxxx>
Date: Sat, 23 Mar 2013 16:07:53 +0100
Reading the messages helps :-)
<xsl:variable name="doc" as="element()*" select="document($paths)/*"/>

Output OK. Thanks for improving my knowledge! (With a total of 200K
characters in the 3 files there certainly wasn't a noticeable
difference in execution speed.)

-W


On 23/03/2013, Wolfgang Laun <wolfgang.laun@xxxxxxxxx> wrote:
> Hi David,
>
> I tried this, and the proposed <xsl:variable name="doc"> produces an error.
>
> <xsl:variable name="paths" as="item()*">
>   <xsl:sequence select = "($p1,$p2,$p3)" />
> </xsl:variable>
> <xsl:variable name="doc" as="document-node()*"
> select="document($paths)/*"/>
>
> Warning: on line 34
>   Required item type of value of variable $doc is document-node();
> supplied value has item
>   type element(). The expression can succeed only if the supplied
> value is an empty sequence.
> Warning: on line 34 of strip4ilp.xsl:
>   The only value that can pass type-checking is an empty sequence.
> Required item type of
>   value of variable $doc is document-node(); supplied value has item
> type element()
> Warning: on line 34 of strip4ilp.xsl:
>   The only value that can pass type-checking is an empty sequence.
> Required item type of
>   value of variable $doc is document-node(); supplied value has item
> type element()
> Error on line 34 of strip4ilp.xsl:
>   XTTE0570: Required item type of value of variable $doc is
> document-node(); supplied value
>   has item type element({http://www.w3.org/2001/XMLSchema}schema,
> xs:anyType)
>
> -W
>
> On 23/03/2013, David Carlisle <davidc@xxxxxxxxx> wrote:
>> On 09/03/2013 16:02, Wolfgang Laun wrote:
>>> XSLT 2.0.
>>>
>>> I had to create a single document from several inputs (so that a key
>>> lookup could access them all with a single call):
>>>
>>> <xsl:variable name="doc" as="document-node()"> <xsl:document>
>>> <xsl:sequence select="document($paths)/*"/> </xsl:document>
>>> </xsl:variable> <xsl:key name="kSkips"
>>> match="element()[@omc:ilp='0']" use="@name"/>
>>>
>>> <xsl:variable name="look" select="key('kSkips',$name,$doc)"/>
>>>
>>
>> If you are only concatenating them for the key lookup that's an
>> expensive way to do it (unless your processor internally manages to
>> avoid copying all the nodes).
>>
>> Why not just look up along the sequence of documents?
>>
>> <xsl:variable name="docs" as="document-node()*"
>> select="document($paths)/*"/>
>>
>> <xsl:variable name="look" select="$docs/key('kSkips',$name,.)"/>
>>
>> David

Current Thread