xsl-list
[Top] [All Lists]

[xsl] Numbering selected output sequentially

2006-09-08 07:46:26
Problem:

I am selecting items from the <Plate> document below based upon there being content in the <BottomPane> element. In the Output <List> XML document, I want to number each sequentially in an <Instance> element. That is, if I find 10 instances of <BottomPanel> with data, I want the <Instance> elemets to read 1 through 10. Not all <Stamp> elements have data in the <BottomPanel> element, I am trying to select, output, and count those that do. <xsl:number> does not work the way I am using it. Can you help? (I have omitted most of the 100 <Stamp> elements in the <Plate> document and foreshortened the stylesheet to just the main template. I hope that was OK. I have typed the XML/XSLT in by hand and hope there are no errors. I have looked in the XSLT Cookbook but clearly did not understand <xsl:number>

Mark
--------------

OUTPUT
<List>
    <Entry>
     <Instance>1</Instance>
<BottomPanel>Dark spot in the white area above the numeral 1</BottomPanel>
     <Location>
          <Design>II</Design>
          <Value>100</Value>
          <PlateNumber>1</PlateNumber>
          <Position>1</Position>
     </Location>
</Entry>
<Entry>
     <Instance>2</Instance>
<BottomPanel>Line across the throat and breast of the left dove</BottomPanel>
     <Location>
          <Design>II</Design>
          <Value>100</Value>
          <PlateNumber>1</PlateNumber>
          <Position>100</Position>
     </Location>
    </Entry>

STYLESHEET TEMPLATE
<xsl:template match="Stamp/BottomPanel">
     <xsl:if test="string-length(.)">
      <Entry>
       <Instance>
            <xsl:number count="*" format="1" /> <!-- DOES NOT WORK -->
       </Instance>
       <xsl:copy-of select="." />
       <Location>
            <xsl:copy-of select="../../Design" />
            <xsl:copy-of select="../../Value" />
            <xsl:copy-of select="../../PlateNumber" />
            <xsl:copy-of select="../Position"></xsl:copy-of>
      </Location>
    </Entry>
 </xsl:if>
 </xsl:template>

DOCUMENT
I have an xml document which has roughly the below structure but with 100 "stamp" objects:
<?xml version="1.0" encoding="UTF-8"?>
<Plate>
    <Design>II</Design>
    <Value>100</Value>
    <PlateNumber>1</PlateNumber>
    <Stamp>
         <Position>1</Position>
         <TopPanel></TopPanel>
         <LeftPanel>[Notch in the left edge opposite the  C]</LeftPanel>
         <RightPanel></RightPanel>
         <CenterPanel>Dot over the sun at 12:15</CenterPanel>
<BottomPanel>Dark spot in the white area above the numeral 1</BottomPanel>
    </Stamp>
   <Stamp>
         <Position>2</Position>
         <TopPanel></TopPanel>
         <LeftPanel>[Notch in the left edge opposite the  C]</LeftPanel>
         <RightPanel></RightPanel>
         <CenterPanel>Dot over the sun at 12:15</CenterPanel>
         <BottomPanel></BottomPanel>
    </Stamp>
    <Stamp>
         <Position>100</Position>
         <TopPanel>Dot in the top panel under P</TopPanel>
             <LeftPanel></LeftPanel>
             <RightPanel></RightPanel>
<CenterPanel>dot to the left of the tip of the third tower; dot on the sun at 2:00</CenterPanel> <BottomPanel>Line across the throat and breast of the left dove</BottomPanel>
    </Stamp>
</Plate>



--~------------------------------------------------------------------
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>
  • [xsl] Numbering selected output sequentially, Mark Wilson <=