Home. 
.

transparent

transparent

transparent

Altova Mailing List Archives


Re: [xsl] Displaying Element Values - basic ?

From: "Jay Bryant" <jay@------------>
To:
Date: 1/3/2007 4:33:00 PM
Forgive me if this posted already.



I'm having trouble pulling the value of an element, I want to read the
value of element <Assignment>. I can't figure out how to do it, even
though it's extremely basic. I'm using the W3C xslt tutorial and they
really don't have anything on how to do this, using my format. I would
like to keep my xml structure, because this is easy to read format and
it's generated dynamically by a PHP application. Can anyone give me a tip?

xml:
       <Assignments>
               <Assignment duedate = "1/21/07" assigned =
"1/02/07">Read Ch.3</Assignment>
               <Assignment duedate = "1/30/07" assigned =
"1/02/07">Test Ch. 3</Assignment>
       </Assignments>

My current XSLT:
       <xsl:for-each select="Assignments/Assignment">
               <tr>
                       <td><xsl:value-of select="@DateDue"/></td>
                       <td><xsl:value-of select="@DateAssigned"/></td>
                       <!-- Not going to pull the value -->
                       <td><xsl:value-of select="Assignment"></td>
               </tr>
       </xsl:for-each>

One of the core concepts of XSTL is context. In your case, the for-each 
instruction sets the context to the Assignment elements. For <xsl:value-of 
select="Assignment"> to work, an Assignment element would have to have an 
Assignment element as a child.



What you need to do is select the current context, thus:



<xsl:value-of select=".">



Also, I bet your overall design would benefit from applying templates at 
each level rather than using for-each to reach past an intermediate level of 
elements. For people coming from a procedural language, for-each seems like 
a for loop and feels comfortable. Unfortunately, that's a dangerous 
mis-perception that usually leads to some really hard-to-solve issues. So, I 
suggest you get in the habit of doing things the XSLT way and use templates 
as your first choice and for-each when you must.



To do the same thing with templates, by the way, you'd have two templates, 
thus:



<xsl:template match="Assignments">
 <xsl:apply-templates/>
</xsl:template>

<xsl:template match="Assignment">
 <tr>
   <td><xsl:value-of select="@DateDue"/></td>
   <td><xsl:value-of select="@DateAssigned"/></td>
   <td><xsl:value-of select="."/></td>
 </tr>
</xsl:template>

HTH



Oh, and welcome to XSLT.



Jay Bryant

Bryant Communication Services


transparent
Print
Mail
Like It
Disclaimer
.

These Archives are provided for informational purposes only and have been generated directly from the Altova mailing list archive system and are comprised of the lists set forth on www.altova.com/list/index.html. Therefore, Altova does not warrant or guarantee the accuracy, reliability, completeness, usefulness, non-infringement of intellectual property rights, or quality of any content on the Altova Mailing List Archive(s), regardless of who originates that content. You expressly understand and agree that you bear all risks associated with using or relying on that content. Altova will not be liable or responsible in any way for any content posted including, but not limited to, any errors or omissions in content, or for any losses or damage of any kind incurred as a result of the use of or reliance on any content. This disclaimer and limitation on liability is in addition to the disclaimers and limitations contained in the Website Terms of Use and elsewhere on the site.

.
.

transparent

transparent