Subject: Replacement for "first-of-type", etc. From: Michel Goossens <Michel.Goossens@xxxxxxx> Date: Fri, 23 Apr 1999 17:32:30 +0200 (METDST) |
I would like to select all child element types that occur only once. In the previous draft I wrote something like <xsl-template match="*[first-of-type() and last-of-type()]"> ... But I do not see an evident replacement in the current (April 22) draft. Here is an example: Consider the following XML file: <article> <title>This is the article's title</title> <author>Author One</author> <author>Author Two</author> <abstract>A <emph>short</emph> description of the contents</abstract> <section> <stitle>First section title</stitle> <par>The first paragraph for this section.</par> <par>A paragraph with <emph>emphasised</emph> text.</par> <par>This is the end of the section.</par> </section> <section> <stitle>Second section title</stitle> <par>This is <emph>emph</emph> and <emph>more emph</emph> text.</par> <par>Paragraph with <bold>bold</bold> and <emph>emphasised</emph> text.</par> </section> </article> with the following XSL stylesheet: <?xml version='1.0'?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0"> <xsl:template match="/"> <xsl:text>(*root*)</xsl:text> <xsl:apply-templates/> <xsl:text>(/*root*)</xsl:text> </xsl:template> <xsl:template match="*" priority="-1"> <xsl:text>(*)</xsl:text> <xsl:apply-templates/> <xsl:text>(/*)</xsl:text> </xsl:template> <xsl:template match="*[position()=1 and position()=last()]" priority="1"> <xsl:text>($)</xsl:text> <xsl:apply-templates/> <xsl:text>(/$)</xsl:text> </xsl:template> </xsl:stylesheet> Then I obtain with xt the following output (which is correct): (*root*)($) (*)This is the article's title(/*) (*)Author One(/*) (*)Author Two(/*) (*)A ($)short(/$) description of the contents(/*) (*) (*)First section title(/*) (*)The first paragraph for this section.(/*) (*)A paragraph with ($)emphasised(/$) text.(/*) (*)This is the end of the section.(/*) (/*) (*) (*)Second section title(/*) (*)This is (*)emph(/*) and (*)more emph(/*) text.(/*) (*)Paragraph with (*)bold(/*) and (*)emphasised(/*) text.(/*) (/*) (/$) But I would like to select the <title>, <abstract>, and <stitle> elements, plus the <bold> and <emph> elements in the last <par> element since they are unique child elements of their respective types for the parent node. I tried to understand how to work with the preceding and following-sibling axes, but the syntax I should use escapes me. Can somebody explain how I could express my match pattern? Thanks. m ---------------------------------------------------- Dr. Michel Goossens Phone: (+41 22) 767-5028 IT Division Fax: (+41 22) 767-8630 CERN Email: goossens@xxxxxxx CH-1211 Geneva 23 F-01631 CERN Cedex Switzerland France XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: Not grokking keys..., Kay Michael | Thread | Re: Replacement for "first-of-type", James Clark |
Local XML/SGML Users Groups, Laurie Mann | Date | Grabbing the HTML output in IE5, Matt MacKenzie |
Month |