xsl-list
[Top] [All Lists]

RE: Numbered Elements

2003-05-03 10:27:20
Michael,

So, the key runs independent of the number element, and just picks up all
occurrences of  "Equation", in order, and returns the key value for the
matched IdRef value?

I added items shown below. The result is a blank.

<xsl:key name="kEqn" match="Equation" use="Target" />

<xsl:template match="etd:xRef">
        <xsl:apply-templates select="key('kEqn', etd:RefElemID)"/>
</xsl:template>

Equation and Target are both elements declared within the etd namespace. I
tried the template with and without etd: prefixes.

tks,

jwc

-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com]On Behalf Of 
Michael Kay
Sent: Saturday, May 03, 2003 11:02 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: RE: [xsl] Numbered Elements

Still new to XML/XSLT, I am trying to get my arms around the
numbering methods in XML. Believe I have succeeded in
auto-numbering figures, equations, tables, etc. Now I need to
refer to an element by number. From textbooks and online
reading I have the following:

An element Equation of type EquationType:
   <xs:complexType name="EquationType">
      <xs:element name="Expression" type="xs:string"/>
      <xs:element name="Target" type="xs:ID" use="required" />
   </xs:complexType>

An element xRef of type xRefType:
   <xs:complexType name="xRefType">
      <xs:sequence>
         <xs:element name="RefElemType" type="xs:string"/>
         <xs:element name="RefElemID" type="xs:IDREF"/>
      </xs:sequence>
   </xs:complexType>

The Transform template of xRef is
   <xsl:template match="etd:xRef">
      <xsl:apply-templates select="number[(_at_)Target='etd:RefElemID']" />
   </xsl:template>

Instead of the number of the equation having the indicated
target value, the result is a blank. There are no error messages.

You have tried to select a child element called "number" and there isn't
one. If there were one, you would be selecting it only if its @Target
attribute were equal to the string "etd:RefElemId". But Target is not an
attribute, it is an element, and the string is not a string, it is an
element name - so you seem pretty confused.

I think you want

<xsl:key name="k" match="Equation" use="Target"/>

then

<xsl:apply-template select="key('k', etd:RefElemId)"/>

though I'm guessing wildly about the namespace.

Michael Kay


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



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