xsl-list
[Top] [All Lists]

RE: [xsl] Fwd: Multiple OR Expression across a node-set

2006-11-29 13:58:36
If the document can contain only a specified subset of "id" values, then you 
are making far too much of this. Consider these templates:

  <xsl:template match="/">
    <xsl:apply-templates />
  </xsl:template>

  <xsl:template match="root">
    <xsl:apply-templates select="view[id='foo']" />
    <xsl:apply-templates select="view[id='bar']" />
    <xsl:apply-templates select="view[id = 'bar_archive']"/>
    <xsl:apply-templates select="view[id = 'foo_archive']"/>
  </xsl:template>

We have a specific order for the output, no matter what the order of the input, 
and the fact that a specific template rule may not match an element in the 
input doc has no effect on the output.

If I have misunderstood your problem, please re-state it.


-- 
Charles Knell
cknell(_at_)onebox(_dot_)com - email



-----Original Message-----
From:     Spencer Tickner <spencertickner(_at_)gmail(_dot_)com>
Sent:     Wed, 29 Nov 2006 11:19:20 -0800
To:       xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject:  [xsl] Fwd: Multiple OR Expression across a node-set

My Sincerest apologizes, I accidentally sent this to the xml list.


Hi List,

Thanks in advance for the help. I think I left my brain in Cuba, and
cannot seem to figure out this fairly straight forward problem (well
that and secretly hoping someone has a more elegant way of doing
this).

So I have a generated XML

<root>
 <view>
   <id>foo</id>
   <name>foo</name>
 </view>
 <view>
  <id>bar_archive</id>
  <name>Bar Archive</name>
 </view>
 <view>
  <id>bar</id>
  <name>bar</name>
 </view>
 <view>
  <id>foo_archive</id>
  <name>Foo Archive</name>
 </view>
</root>

Issue comes from the fact that every time I get this XML file, the
<view>s are in different, random order. I need them in a specific
order every time. Along with this, sometimes a <view> exists, and
sometimes it doesn't which should be reflected in the output. So far
my XSL looks something like this (I've marked where my if statement is
failing):

<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

<xsl:template match="/">

<html>
<body>
<!-- This if statement fails (Value of expression cannot be converted
to a node-set in expression) -->
<xsl:if test="root//view/id = 'foo' | root//view/id = 'bar'">
  <p>Here are the foo bars</p>
  <ul>
  <xsl:apply-templates select="root//view[id='bar']"/>
  <xsl:apply-templates select="root//view[id='foo']"/>
  </ul>
</xsl:if>

<xsl:if test="contains(root//view/id, 'archive')">
        <p>Here are archive foo bars</p>
        <blockquote>
        <xsl:apply-templates select="root//view[id = 'bar_archive']"/>
        <xsl:apply-templates select="root//view[id = 'foo_archive']"/>
        </blockquote>
</xsl:if>

</body>
</html>

</xsl:template>

<xsl:template match="view" priority="5">
<li><xsl:value-of select="name"/></li>
</xsl:template>

<xsl:template match="view[contains(id, 'archive')]" priority="10">
<p><xsl:value-of select="name"/></p>
</xsl:template>

</xsl:stylesheet>

Any thoughts would be greatly appreciated. (PS - I am stuck with 1.0)

Thanks you,

Spencer Tickner

--~------------------------------------------------------------------
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>
--~--




--~------------------------------------------------------------------
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>
--~--

<Prev in Thread] Current Thread [Next in Thread>