RE: Another newbie question (from Sanjay Saxena)

Subject: RE: Another newbie question (from Sanjay Saxena)
From: Kay Michael <Michael.Kay@xxxxxxx>
Date: Wed, 8 Dec 1999 12:17:12 -0000
Your problem is to find an element whose name is not known until execution
time. The only way to do this is to write an expression that matches all
elements, and use name() or local-name() in the predicate to select more
precisely. So you need something like

    <xsl:for-each select="CONTAINER"> 
	<xsl:variable name="pre" select="string(PRE_HTML)"	
      <xsl:copy-of select="//*[name()=$pre]"/> 
        <!-- Do some more things here --> 
	<xsl:variable name="post" select="string(POST_HTML)"	
      <xsl:copy-of select="//*[name()=$pre]"/>
    </xsl:for-each> 

This will not be efficient, you could probably improve the performance using
keys.

Note that the <xsl:copy-of> element must be empty.

Mike Kay
 
 -----Original Message-----
From: Sanjay Saxena [mailto:ssaxena@xxxxxxxxxxxxx]
Sent: 08 December 1999 01:43
To: xsl-list@xxxxxxxxxxxxxxxx
Subject: Another newbie question


Hi, 
I am a newbie so please  bear with me. In my XML, I have 
meta-data which references data. For example, my XML looks 
as shown: 
<CONTAINERS> 
    <CONTAINER> 
        <PRE_HTML>DEPT_PREHTML</PRE_HTML> 
        <TITLE>Departments</TITLE> 
        <POST_HTML>DEPT_POSTHTML</POST_HTML> 
    </CONTAINER> 
    <CONTAINER> 
        <PRE_HTML>EMP_PREHTML</PRE_HTML> 
        <TITLE>Employees</TITLE> 
        <POST_HTML>EMP_POSTHTML</POST_HTML> 
    </CONTAINER> 
</CONTAINERS> 
So, every container has a PRE_HTML and POST_HTML element 
which references other nodes in my XML. For example, the 
Departments container references the DEPT_PREHTML and 
DEPT_POSTHTML nodes. The DEPT_PREHTML and DEPT_POSTHMTL 
nodes look as shown: 
<DEPT_PREHTML> 
    <DIV id="Layer1" style="position: absolute" 
        <IMG src="/images/edu.gif" width="917" height="104"/> 
    </DIV> 
</DEPT_PREHTML> 
<DEPT_POSTHTML> 
     <!-- Some more well formed HTML. --> 
</DEPT_POSTHTML> 
Similarly, EMP_PREHTML and EMP_POSTHTML contain well-formed 
HTML. 
In my XSL, I would like to iterate through each of the 
containers and spit out the well-formed HTML which is sitting in 
the respective PRE_HTML and POST_HTML nodes. However, I am 
not having any luck dereferencing the node name that is the 
value of an element. In the XSL, I am using the xsl:copy-of 
to spit out the node specified by the PRE_HTML and POST_HTML 
elements of the CONTAINER. But, this does not work. The XSL 
looks as shown below: 
<xsl:template match="/CONTAINERS"> 
    <xsl:for-each select="CONTAINER"> 
        <xsl:copy-of select="PRE_HTML" 
            <xsl:apply-templates select="*|@*|text()"/> 
        </xsl:copy-of> 
        <!-- Do some more things here --> 
        <xsl:copy-of select="POST_HTML" 
            <xsl:apply-templates select="*|@*|text()"/> 
        </xsl:copy-of> 
    </xsl:for-each> 
</xsl:template> 
Can somebody shed any light on this? How do I spit out 
the well-formed HTML sitting in various nodes that are 
referenced by the PRE_HTML and POST_HTML elements? 
  
Thanks in advance, 
Sanjay 


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread