|
Subject: Re: [xsl] starts-with on more than one item From: David Carlisle <davidc@xxxxxxxxx> Date: Tue, 27 May 2008 23:32:27 +0100 |
<xsl:for-each select="document('mySkus.xml')/skus">
there is only one item selected here, didn't you intend t iterate over
all the sku elements
<xsl:for-each select="document('mySkus.xml')/skus/sku">
?
<xsl:if test="starts-with('.', $skus)">
this is testing if the string "." contais anything saxon is telling you
the second parameter needs to be a single item but you presumably don't
want to test the string ".", you could test . which would select the
skus element but that is effectively your entire document 9ignoring all
markup) so I think you do want the for-each to go over skus/sku and then
to use . here to test each sku.
You could then use
$skus[starts-with(current(),.)]
to test if the current sku node starts aith any of the items in $sku.
(your input document is not well formed, which makes it harder to test
(--- in comments)
something like this:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs"
version="2.0" >
<xsl:key name="sku" match="knowledge/part" use="code" />
<xsl:variable name="skus" as="xs:string*"
select="distinct-values(/knowledge/part/code)" />
<xsl:variable name="root" select="/"/>
<xsl:template match="/">
<html>
<head>
<title>Test Document</title>
</head>
<body>
<H1>Executive Summary</H1>
<p>Your proposal includes
<xsl:value-of
select="for $s in $skus return key('sku',$s[document('mySkus.xml')/skus/sku[starts-with(.,$s)]],$root)/name"
separator=", "/>
</p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
$ saxon9 k.xml k.xsl
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test Document</title>
</head>
<body>
<H1>Executive Summary</H1>
<p>Your proposal includes
Cisco phones, Cisco routers, Cisco switches
</p>
</body>
</html>
________________________________________________________________________
The Numerical Algorithms Group Ltd is a company registered in England
and Wales with company number 1249803. The registered office is:
Wilkinson House, Jordan Hill Road, Oxford OX2 8DR, United Kingdom.
This e-mail has been scanned for all viruses by Star. The service is
powered by MessageLabs.
________________________________________________________________________
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] starts-with on more than one , Ronnie Royston | Thread | [xsl] starts-with on more than one , Ronnie Royston |
| Re: [xsl] Re: element in most prefe, Wendell Piez | Date | Re: [xsl] element in most preferred, Florent Georges |
| Month |