|
Subject: [xsl] filtering elements by single xpath From: "Tomas Kolaci" <kolaci@xxxxxxx> Date: Wed, 5 Apr 2006 16:45:51 +0200 |
Hi!
I'm using XSLT 1.1 and Saxon 6.5.3.
I have following XML structure:
<root>
<body>
<item pos="1" name="n1"/>
<item pos="2" name="n2"/>
<item pos="3" name="n2"/>
<item pos="4" name="n3"/>
<item pos="5" name="n4"/>
</body>
<item-filter>
<allow-items with-name="n2"/>
<allow-items with-name="n4"/>
</item-filter>
</root>
and in template:
<xsl:template match="body">
<xsl:variable
name="filtered-items"
select="item[/root/item-filter/allow-items[@with-name = ???/@name]"
/>
...
</xsl:template>
I'm trying to fill variable filtered-items with elements item with "allowed"
name (= there is an element /root/item-filter/allow-items with attribute
@with-name containing same value as item's @name)*, but I don't know how to
reach current item on ??? position in my select (function current() points
to current body element).
I can handle it by sequential processing (copy of item is good enough for
my needs):
<xsl:variable name="filtered-items">
<xsl:for-each select="item">
<xsl:if
test="/root/item-filter/allow-items[@with-name = current()/@name]">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:variable>
but I'm just curious if it is possible to achieve this by single xpath?
Thanks in advance!
Best regards, Tomas
*resultant filtered-items content for given example should be:
<item pos="2" name="n2"/>
<item pos="3" name="n2"/>
<item pos="5" name="n4"/>
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Divide to pages, Paull | Thread | Re: [xsl] filtering elements by sin, andrew welch |
| RE: [xsl] Divide to pages, Gabriel Osorio | Date | Re: [xsl] filtering elements by sin, andrew welch |
| Month |