xsl-list
[Top] [All Lists]

Re: [xsl] Resolve optional conref and apply another template

2022-01-17 16:51:50
Hi Rick,

To combine templates, I typically use <xsl:next-match> to apply whatever the 
next-in-line template would have been. I put the results in a variable, then 
process the contents of the variable:

    <!-- Convert caution and warning notes to simpletables. -->
    <xsl:template match="note[@type='caution' or @type='warning']" 
priority="10">
        <xsl:variable name="results">
            <xsl:next-match/>  <!-- apply other templates first, just in case 
-->
        </xsl:variable>
        <simpletable relcolwidth="100*" frame="all" outputclass="{@type}">
            <sthead><stentry>{@type => upper-case()}</stentry></sthead>
            <strow>
                <stentry><xsl:sequence select="$results/node()"/></stentry>
            </strow>
        </simpletable>
    </xsl:template>

If you use this approach, you'll want your caution/warning template to have the 
higher priority (so it calls your @conref template as the next-in-line 
template).


  *   Chris


From: rick(_at_)rickquatro(_dot_)com 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com>
Sent: Monday, January 17, 2022 5:37 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Resolve optional conref and apply another template

Hi All,

I have some <note> elements that I want to convert to tables, so I have the 
following template:

    <!-- Convert caution and warning notes to simpletables. -->
    <xsl:template match="note[@type='caution' or @type='warning']">
        <simpletable relcolwidth="100*" frame="all" outputclass="{@type}">
            <sthead><stentry>{@type => upper-case()}</stentry></sthead>
            <strow>
                <stentry><xsl:apply-templates/></stentry>
            </strow>
        </simpletable>
    </xsl:template>

However, some <note> elements are conrefs to other files. I have this template 
to resolve the conrefs:

    <xsl:template match="note[@conref]" priority="2">
        <xsl:variable name="doc">
            <xsl:choose>
                <xsl:when 
test="contains(@conref,'#')">{substring-before(@conref,'#')}</xsl:when>
                <xsl:otherwise>{@conref}</xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <xsl:variable name="id">
            <xsl:if test="contains(@conref,'#')">
                <xsl:variable name="scratch" 
select="substring-after(@conref,'#')"/>
                <xsl:choose>
                    <xsl:when 
test="contains($scratch,'/')">{tokenize($scratch,'/')[last()]}</xsl:when>
                    <xsl:otherwise>{$scratch}</xsl:otherwise>
                </xsl:choose>
            </xsl:if>
        </xsl:variable>
        <xsl:variable name="file" select="resolve-uri($doc,base-uri(.))"/>
        <xsl:choose>
            <xsl:when test="doc-available($file)">
                <xsl:choose>
                    <xsl:when test="($id and $id!='')">
                        <xsl:copy-of select="doc($file)//*[@id=$id]"/>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:copy-of select="doc($file)/*"/>
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:when>
            <xsl:otherwise><xsl:copy-of select="."/></xsl:otherwise>
        </xsl:choose>
    </xsl:template>

I am not sure how to integrate the two templates so that I can convert conref 
notes to tables too. Any pointers would be appreciated. Thank you very much.

Rick

Rick Quatro
Carmen Publishing Inc.
585-729-6746
rick(_at_)frameexpert(_dot_)com<mailto:rick(_at_)frameexpert(_dot_)com>
http://www.frameexpert.com/store<https://urldefense.com/v3/__http:/www.frameexpert.com/store__;!!A4F2R9G_pg!PAl4W0RGU2mzM5zkhGiCgLd8JgviiODhv_Kkz7PeGcKhN0OzaU0noYnp5IAZ0NfnpjO93T0BGmaYXHE$>



XSL-List info and 
archive<https://urldefense.com/v3/__http:/www.mulberrytech.com/xsl/xsl-list__;!!A4F2R9G_pg!PAl4W0RGU2mzM5zkhGiCgLd8JgviiODhv_Kkz7PeGcKhN0OzaU0noYnp5IAZ0NfnpjO93T0B7s5x5Nc$>
EasyUnsubscribe<https://urldefense.com/v3/__http:/lists.mulberrytech.com/unsub/xsl-list/3380743__;!!A4F2R9G_pg!PAl4W0RGU2mzM5zkhGiCgLd8JgviiODhv_Kkz7PeGcKhN0OzaU0noYnp5IAZ0NfnpjO93T0BUffucSQ$>
 (by email<>)
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--
<Prev in Thread] Current Thread [Next in Thread>