xsl-list
[Top] [All Lists]

RE: [xsl] Glossary Help

2006-08-03 07:15:09
Hi,

The below xsl code works fine and getting required output....but now I have
receive the xml file from client where the <p id="doe13"> contains so the
below xsl code is failing to match the cases......what needs to be done
here?


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
        <xsl:output method="xml" indent="yes"/>
        <xsl:preserve-space elements="*"/>
        <xsl:strip-space elements="*"/>
        <xsl:template match="node()|@*">
                <xsl:copy>
                        <xsl:apply-templates select="@*|node()"/>
                </xsl:copy>
        </xsl:template>

<xsl:template match="division[(@type='appendix') and ((topic/title =
'Glossary') or  (topic/title = 'A'))]">
                <division>
                        <xsl:copy-of select="@*"/>
                        <xsl:for-each select="topic">
                                <topic>
                                        <xsl:copy-of select="@*"/>
                                        <xsl:copy-of select="title"/>
                                        <xsl:apply-templates
select="body[ancestor::division[(@type='appendix')]]" mode="dogloss"/>
                                </topic>
                                </xsl:for-each>
                                        </division>
        </xsl:template>

        <xsl:template match="body[ancestor::division[(@type='appendix')]]"
mode="dogloss">
                <glosslist>
                        <xsl:apply-templates select="p[not(text())]/i/b"
mode="dogloss"/>
                        <xsl:apply-templates select="p[text()]/i/b"
mode="dogloss"/>
                        <xsl:apply-templates select="p[not(text())]/b"
mode="dogloss"/>
                        <xsl:apply-templates select="p[text()]/b"
mode="dogloss"/>
                </glosslist>
        </xsl:template>

        <xsl:template match="p[not(text())]/i/b" mode="dogloss">
        <glossdiv>
                        <xsl:value-of select="."/>
                </glossdiv>
        </xsl:template>

        <xsl:template match="p[text()]/i/b" mode="dogloss">
                <glossentry>
                        <glossterm>
                                <xsl:value-of select="."/>
                        </glossterm>
                        <glossdef>
                                <xsl:value-of select="../../text()"/>
                        </glossdef>
                </glossentry>
        </xsl:template>
        
        <xsl:template match="p[not(text())]/b" mode="dogloss">
                <glossdiv>
                        <xsl:value-of select="."/>
                </glossdiv>
        </xsl:template>

        <xsl:template match="p[text()]/b" mode="dogloss">
                <glossentry>
                        <glossterm>
                                <xsl:value-of select="."/>
                        </glossterm>
                                <glossdef>
                                <xsl:value-of select="../text()"/>
                        </glossdef>
                        </glossentry>
        </xsl:template>
                </xsl:stylesheet>


Thanks,
Shailesh

-----Original Message-----
From: Mukul Gandhi [mailto:gandhi(_dot_)mukul(_at_)gmail(_dot_)com] 
Sent: Monday, July 31, 2006 10:02 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] Glossary Help

On 7/31/06, Shailesh Shinde <shailesh(_at_)quagnito(_dot_)com> wrote:

I have few comments..

       <xsl:preserve-space elements="*"/>
       <xsl:strip-space elements="*"/>

I think you may not need above. This seems to have no effect.

I think you can modify the below template as following:

       <xsl:template match="division[(@type='appendix') and
((topic/title = 'Glossary') or (topic/title = 'A'))]"> <!-- you can
add more or clauses -->
           <division>
               <xsl:copy-of select="@*"/>
               <xsl:for-each select="topic">
                  <topic>
                     <xsl:copy-of select="@*"/>
                     <xsl:copy-of select="title"/>
                     <!-- you may need to modify this as well -->
                     <xsl:apply-templates
select="body[ancestor::division[(_at_)type='appendix']]"/>
                  </topic>
               </xsl:for-each>
               <xsl:apply-templates/>
           </division>
       </xsl:template>

I guess I have given you lot of pointers to get started.

-- 
Regards,
Mukul Gandhi

http://gandhimukul.tripod.com

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--





--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>