This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

re: xsl stylesheet for shares table


Kevin,

>I am new to xsl and I seem to be receiving an error associated with the text
>editor xml spy, it tells me that it is unable to reference a schema type.

I think you're problem's probably arising because you're trying to validate
the XSLT file.  In order to validate the file, XML Spy needs to be able to
locate a reference to a DTD or a schema to tell it what
elements/attributes/entities and so on to expect.  There's no reference to
one in your stylesheet file (no !DOCTYPE and no xsi:schemaLocation
attribute), so it can't find anything to validate the document against.

In fact, you never really need to validate XSLT stylesheets.  They are very
difficult to validate because you can have any content in them you like:
the result tree might be of any kind, which means that most of the XSLT
elements could contain just about anything, and when you have an element
that could contain just about anything there's not much point validating in
the first place.

So don't try to validate it (don't click on that green tick) and stop it
from validating on load (Edit menu > Settings... item > File types tab,
select '.xsl' and check the 'Disable automatic validation' checkbox, I
think).  Then XML Spy will stop complaining.

>I was also curious as to the set-up of my xsl, I am trying to create a
>simple table with share prices, gains and losses etc... is this a correct
>format?

It's hard to say without knowing what your XML source or your desired
output looks like.  I'm going to have a guess from your brief description,
but I may be wildly wrong - I apologise in advance if what I say is useless
because of that.

I think your XML source probably looks something like:

<shares>
  <share>
    <symbol>...</symbol>
    <date>...</date>
    ...
  </share>
  <share>
    <symbol>...</symbol>
    <date>...</date>
    ...
  </share>
  ...
</shares>

With your template, the match="/" means that within the body of the
template, you're matching the root node, which is the node that sits at the
very top of the document structure.  The document structure represented by
the above XML looks like:

+- (root node)
   +- 'shares' element
      +- 'share' element
      |  +- 'symbol' element
      |  +- 'date' element
      |  +- ...
      +- 'share' element
         +- 'symbol' element
         +- 'date' element
         +- ...

When you say:

  <xsl:apply-templates select="share" />

you're asking it to find it's child element named 'share'.  Similarly, when
you say:

  <xsl:value-of select="symbol" />

you're asking it to find it's child element named 'symbol'.

In the document structure shown above you can see that the root node only
has one child, the 'shares' element.  What you probably want to do, within
your table, is create one row per 'share' element.  You can do this by
applying templates to those elements, but you have to make sure that (a)
you're selecting them correctly and (b) you have a template that matches
them to create the rows.  So, you should be applying templates within the
root-node-matching template using:

  <xsl:apply-templates select="shares/share" />

You should also have template that creates a table row based on the share:

<xsl:template match="share">
  <tr>
    <td align="center"><value-of select="symbol"/></td>
    <td align="center"><value-of select="date"/></td>
    ...
  </tr>
</xsl:template>

and should take out the bits that are generating table rows within the
root-node-matching template.

I hope that this helps, but if you'd like any more detailed advice then
please give us an example of what your source looks like (and what you want
the result to look like).

Cheers,

Jeni

Jeni Tennison
http://www.jenitennison.com/


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]