[Home] [By Thread] [By Date] [Recent Entries]
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>
|

Cart



