[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] XSL stylesheet issue - part 2 (newbie)
Hi again, I am stuck again. The next and last step in my XSL script is to create the hyperlinked TOC entries for all elements with an ID attribute that starts with the characters btocrefb. With the help of AI, I added some XSL templates. The script is supposed to create a TOC like this: <p class=btoclev1b><a href=b#tocref-cx34gb>Heading on level 1</a></p> <p class=btoclev2b><a href=b#tocref-df38db>Heading on level 2</a></p> <p class=btoclev3b><a href=b#tocref-f8op7b>Heading on level 3</a></p> What the script actually does is adding the unique btocref-b&b IDs to the headings, but it does not create the hyperlinked TOC entries. Below is the script. I have attached an HTML file which shows an example of the script output. Again a namespace issue? Any help is greatly appreciated! <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xpath-default-namespace="http://www.w3.org/1999/xhtml" xmlns:xhtml="http://www.w3.org/1999/xhtml" version="3.0"> <!-- Output settings for XHTML --> <xsl:output method="html" encoding="UTF-8" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" indent="yes"/> <!-- Identity template to copy all elements and attributes --> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <!-- Adding a unique ID attribute using generate-id() to headings to create hyperlink targets for the TOC --> <xsl:template match="*[@id='rn_release_notes']//h2 | *[@id='rn_release_notes']//h3 | *[@id='rn_release_notes']//p[@class='rn_heading']"> <xsl:copy> <!-- Generating a unique ID for each element --> <xsl:attribute name="id"> <xsl:text>tocref-</xsl:text> <xsl:value-of select="generate-id()"/> </xsl:attribute> <!-- Copy the remaining attributes except "id", and apply templates to children --> <xsl:apply-templates select="@*[name() != 'id']"/> <xsl:apply-templates select="node()"/> </xsl:copy> </xsl:template> <!-- Template to generate the TOC --> <xsl:template match="div[@id='rn_toc']"> <xsl:copy> <xsl:apply-templates select="@*"/> <xsl:apply-templates select="h1"/> <!-- Insert the TOC after the <h1> element --> <xsl:for-each select="//*[@id[starts-with(., 'tocref')]]"> <xsl:variable name="level"> <xsl:choose> <xsl:when test="self::h2">1</xsl:when> <xsl:when test="self::h3">2</xsl:when> <xsl:when test="self::p[@class='rn_heading']">3</xsl:when> </xsl:choose> </xsl:variable> <xhtml:p class="toclev{level}"> <xhtml:a href="#{ <mailto:#{./@id}> ./@id}"> <xsl:value-of select="."/> </xhtml:a> </xhtml:p> </xsl:for-each> </xsl:copy> </xsl:template> </xsl:stylesheet> Freundliche GrC<Ce | Best regards Frank Dissinger Documentation Manager .......................................... CGS ORIS GmbH Email <mailto:frank.dissinger@xxxxxxxxxxxx> frank.dissinger@xxxxxxxxxxxx | Web <http://www.cgs-oris.com/> www.cgs-oris.com Address Kettelerstrasse 24 | 63512 Hainburg | Germany Phone +49 6182 9626-0 | Fax +49 6182 9626-99 Commercial register Offenbach, HRB no. 21495 Managing directors Bernd RC<ckert, Christoph Thommessen Von: Frank Dissinger <frank.dissinger@xxxxxxxxxxxx <mailto:frank.dissinger@xxxxxxxxxxxx> > Gesendet: Montag, 21. Oktober 2024 13:12 An: xsl-list@xxxxxxxxxxxxxxxxxxxxxx <mailto:xsl-list@xxxxxxxxxxxxxxxxxxxxxx> Betreff: XSL stylesheet issue (newbie) Hi Martin, I have added the bxpath-default-namespaceb attribute and now the script indeed produces the expected result. Thank you very much for your great help! The XSL element looks like this now: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xpath-default-namespace="http://www.w3.org/1999/xhtml" > BTW: I had to change the XSL version from 1.0 to 2.0 in the XSL element, otherwise Oxygen would use Saxon 6.5.5 for validation, which does not support the xpath-default-namespace atttribute. Now it uses "Saxon-PE 12.3" and the validation error message disappears. I found out that I can also change this to bversion=3.0b. The script would still run without any problems and validation issues. Freundliche GrC<Ce | Best regards Frank Dissinger Documentation Manager .......................................... CGS ORIS GmbH Email <mailto:frank.dissinger@xxxxxxxxxxxx> frank.dissinger@xxxxxxxxxxxx | Web <http://www.cgs-oris.com/> www.cgs-oris.com Address Kettelerstrasse 24 | 63512 Hainburg | Germany Phone +49 6182 9626-0 | Fax +49 6182 9626-99 Commercial register Offenbach, HRB no. 21495 Managing directors Bernd RC<ckert, Christoph Thommessenb Von: Martin Honnen martin.honnen@xxxxxx <mailto:martin.honnen@xxxxxx> <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx <mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> > Gesendet: Donnerstag, 17. Oktober 2024 19:52 An: xsl-list@xxxxxxxxxxxxxxxxxxxxxx <mailto:xsl-list@xxxxxxxxxxxxxxxxxxxxxx> Betreff: Re: XSL stylesheet issue (newbie) On 17/10/2024 19:41, Martin Honnen <mailto:martin.honnen@xxxxxx> martin.honnen@xxxxxx wrote: The stylesheet below is supposed to add a unique 'id' attribute named 'tocref001', 'tocref002' etc. to all <h2>, <h3> and <p class="rn_heading"> elements which are descendants of an element with an 'id' attribute named 'rn_release_notes'. The script runs without any errors, but does not add any IDs. The sample input has e.g. html xmlns= <http://www.w3.org/1999/xhtml> "http://www.w3.org/1999/xhtml" meaning it has elements in the XHTML namespace, if you use an XSLT 2 or 3 processor like Saxon Java, SaxonJS, SaxonC or Saxon.NET you can add xpath-default-namespace= <http://www.w3.org/1999/xhtml> "http://www.w3.org/1999/xhtml" on your xsl:stylesheet element in the XSLT code and your match <!-- Adding id=toc001 attributes to headings to create hyperlink targets for the TOC --> <xsl:template match="*[@id='rn_release_notes']//h2 | *[@id='rn_release_notes']//h3 | *[@id='rn_release_notes']//p[@class='rn_heading']"> will match XHTML elements. With more recent version of Saxon (11, 12 at least, I think) you could also use your original stylesheet code but add the command line option -ns:##html5 for execution [demime 1.01d removed an attachment of type image/png which had a name of image001.png]
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|