[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> etc. What the script actually does is adding the unique btocref-b&b IDs to the headings (as before), 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 HTML file output by the script. Again a namespace issue? Any help is greatly appreciated! ---------------------------- BEGIN SCRIPT ------------------------------------------------- <?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}"> <xsl:value-of select="."/> </xhtml:a> </xhtml:p> </xsl:for-each> </xsl:copy> </xsl:template> </xsl:stylesheet> ---------------------------- END SCRIPT ------------------------------------------------- Frank Dissinger Documentation Manager .......................................... CGS ORIS GmbH frank.dissinger@xxxxxxxxxxxx | www.cgs-oris.com 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 <mailto:frank.dissinger@xxxxxxxxxxxx> Gesendet: Montag, 21. Oktober 2024 13:12 An: 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. ----------------------------------------------------------------------------- ----------------------------------- On 17/10/2024 19:41, Martin Honnen mailto: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 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 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 COLOR TUNER Version 3.4 Release Notes B) CGS ORIS GmbH b 10/21/2024 ===================================================================== This file describes the additions, modifications and bug fixes in COLOR TUNER Version 3.4. Licensing --------- COLOR TUNER Version 3.4 is license-protected and requires a new software license. If there is a valid software service contract, the license is free of charge and will be sent automatically. System Recommendations ---------------------- We recommend the following computer equipment for optimum performance and high throughput: * Intel Core i7 6th generation or better * 16 GB of RAM or more * 500 GB SSD disk (system disk) or more * Windows 10 or newer Installation ------------ Certain programs may block the installation process. The process pauses after extracting the installation files. In this case proceed as follows: 1. If the current version of Adobe Creative Cloud is installed, exit the Adobe Creative Cloud desktop app. Do this by selecting File > Exit Creative Cloud, then click Quit to stop all background processes. 2. Start Windows Task Manager and click the Details tab. 3. Right-click Setup.exe and select Analyze wait chain. 4. The process listed under Setup.exe is blocking the installation. Select and end it. Contents ======== COLOR TUNER Version 3.4 Release Notes ===================================== Additions --------- Support for X-Rite eXact 2 66210 COLOR TUNER V3.4 additionally supports the measurement device eXact 2 from X-Rite for measuring color strips and single patches. RN_Heading Coming soon Support for New Cars 66210 Note: COLOR TUNER V3.4 additionally supports new cars. RN_Heading Length, width, height are unknown. Modifications ------------- Modification 1 12345 This is modification 1. This is modification 1. First modification 66211 COLOR TUNER V4.3 was modified. Second modification 66212 Set the values as follows: Value Smoothing level xxx 0 No smoothing xxx 50 (default) Medium xxx 100 Maximum xxx This is all about the table. Bug Fixes --------- Bug Fix 1 12345 This is bug fix 1. This is bug fix 1. First Bug Fix 66211 COLOR TUNER V3.4 has been fixed. Backmatter ========== CGS ORIS GmbH D-63512 Hainburg (Germany) Phone: +49 6182 9626 0 Fax: +49 6182 9626 99 Web: http://www.cgs-oris.com E-mail: support@xxxxxxxxxxxx
|
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
|