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]

xsl:key


Howdy Jeni,

Thank you so much for your reply. It was very helpful.

My aim is to extract paragraphs from the source tree
(temp.xml) to be output to a result tree according to
two criteria:

      * Target doc="contract" and
      * Target host="true"

This is an extension of my original question.
The output I receive is all paragraphs disregardless
of attribute doc and host values.  I have attempted
to achieve my goal using two methods. I hope that you/other
might be able to assist me.

Kind Regards
Rhonda


temp.xml (this I have changed so that Target is not empty)
-------

<Template>

     <Target doc="contract">
     <Target host="true">
          <Para>This is a paragraph that will end up in a
                         contract with hosting customers</Para>
      </Target>
      </Target>

     <Target doc="advice">
     <Target host="true">
          <Para>This is a paragraph that will end up in a
                         customer advice document for
                         hosting customers </Para>
      </Target>
      </Target>

</Template>

ATTEMPT 1: Using the Key() function
=============================

I realise that only one key value can be used and
then the other key value can be used on the filtered
result - unless the intersection saxon extension
function is used. However here I still receive
all paragraphs, it seems without referencing
the index created by my xsl:key?

<xsl:key name="blueprint" match="Para" use="../Target/@doc"/>

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

<xsl:template match="Para">
  <xsl:element name="{name()}">
       <xsl:copy-of select="key('blueprint', contract)"/>
       <xsl:apply-templates/>
   </xsl:element>
</xsl:template>

.......And then template to copy <Template>
I have also, since simply typed the value of contract
in the key, quotes do not seem to make any difference
either way.



ATTEMPT 2: Using a template match
============================

transform.xsl
----------

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

*** the following template is never used ***
*** and I did hope that this template would ***
*** select paragraphs according to attrib values ***
*** specified? ***

<xsl:template match='Para/Target[@doc="contract"
                         and @host="true"]'>
  <xsl:element name="{name()}">
       <xsl:copy-of select="attribute::node()"/>
       <xsl:apply-templates/>
   </xsl:element>
</xsl:template>

<xsl:template match="Template">
    <xsl:element name="{name()}">
         <xsl:copy-of select="attribute::node()"/>
         <xsl:apply-templates/>
    </xsl:element>
</xsl:template>




 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]