xsl-list
[Top] [All Lists]

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

2013-03-23 10:07:34
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(_dot_)laun(_at_)gmail(_dot_)com> 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(_at_)nag(_dot_)co(_dot_)uk> 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





--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--