XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Show tree view Topic
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Postnext
Rick SmithSubject: This is a tough one - I am so stuck! Please help if you can
Author: Rick Smith
Date: 21 Apr 2005 10:04 AM
Originally Posted: 21 Apr 2005 10:00 AM
Ok I have an XML file that is being returned to me, I have attached the file. It contains a series linkurl nodes. These nodes contain a path that I need to output to the screen. The paths need to be displayed in types, the type is defined in the actual value of linkurl as "type ="type_name". If the URL is also marked with "chkHOT=Y", it needs to be highlighed, but only one for group, it will be the first one encountered in the group). The linkurls are already coming back sorted by date. <br> <br> If you view the attached xml it will make more sense.<br> <br> Here is what I have so far. This is not correct as it is Highlighting all "chkHOT=Y" and it is not keeping them in order as I am displaying all HOT ones first followed by all non-hot.<br> <br> <xsl:for-each select="document(linkurl/Value/@current[contains(.,'type=Policy') and contains(.,'chkHot=Y')])"><br> <li class="highlight"><xsl:copy-of select="."/></li><br> </xsl:for-each><br> <br> <xsl:for-each select="document(linkurl/Value/@current[contains(.,'type=Policy') and not(contains(.,'chkHot=Y'))])"><br> <li><xsl:copy-of select="."/></li><br> </xsl:for-each><br> <br> Feel free to email me at rick.webuse@gmail.com if you need anything further.<br> <br> Thanks in advance!


DocumentIOD_Plan_PR.xml
XML linkurl document

Postnext
(Deleted User) Subject: This is a tough one - I am so stuck! Please help if you can
Author: (Deleted User)
Date: 21 Apr 2005 10:59 AM
Rick,

your description is much harder to parse than xml document:)

can you send a sample of desired output based on your xml document and we may be able to help you.

Postnext
Rick SmithSubject: This is a tough one - I am so stuck! Please help if you can
Author: Rick Smith
Date: 21 Apr 2005 11:27 AM
Thanks for any help you can give me.

I have attached an image of how the xsl is to render the XML.

If you need anything further, feel free to ask.

Thanks

Rick


ImageIOD_Mock_up.jpg
Image of site

Postnext
(Deleted User) Subject: This is a tough one - I am so stuck! Please help if you can
Author: (Deleted User)
Date: 21 Apr 2005 01:24 PM
the problem is you hardcode class=highlight in the <li> element. you should do it dynamically by checking if the hot topic is the first one in it's group. try this:
<li>
<xsl:if test="position()=1">
<xsl:attribute name="class">
<xsl:value-of select="'highlight'"/>
</xsl:attribute>
</xsl:if>
<xsl:copy-of select="."/>
</li>

hope this helps

Song
Stylus Studio Team

Postnext
Rick SmithSubject: This is a tough one - I am so stuck! Please help if you can
Author: Rick Smith
Date: 21 Apr 2005 01:47 PM
Thanks for your help.

There is just one proplem, your method is assuming that the first position is a chkHOT = Y. It is not always going to be like that. The logic goes like this: 2 LOOPS. First LOOP
Find all the chkHOT=Y, loop through them and only display the first - where position = 1. That is easy. SECOND LOOP. I need to display the rest of the records. I loop through all records and want to display all except the one I displayed in LOOP 1. How do I tell my loop to display all of the records ecxcept the one I just displayed above. Variables are only local to the For Loop so I cannot check to see which one I have just displayed in the previous loop.

Thanks again for working on this - it is greatly appreciated!



Postnext
(Deleted User) Subject: This is a tough one - I am so stuck! Please help if you can
Author: (Deleted User)
Date: 21 Apr 2005 03:22 PM
you use diffrent xpath predicate in two loops, don't you?

in the loop 1, you use [contains(., chKHot='Y')], in loop2, you use [not contains(., chKHot='Y')]. this will make sure two loops works on diffrent nodeset, and what displayed in the first loop should not appear in second loop, right?

did I miss anything?

Postnext
Rick SmithSubject: This is a tough one - I am so stuck! Please help if you can
Author: Rick Smith
Date: 21 Apr 2005 03:38 PM
I hate to shoot down but it may be that my explanation may not be detailed enough. If I use two loops, which I have done, it gives me all the chkHOT=Y and I display the first one. Only one chkHOT per group may be displayed. the group may have more than one chkHOT. So what then happends to the other hot ones? If I output them and simply not highlight them, they are then out of order according to date.
So if we have

A is Hot, B is Hot, C is NOT, D is NOT, E is Hot. The first loop gives us ABE. I highlight A, do not highlight BE. Then output C and D. The dates are then out of order cause C and D have a later deate than E yet E occurs before C and D in my display.

Now I have totally lost you!

Thanks for you help!



Postnext
(Deleted User) Subject: This is a tough one - I am so stuck! Please help if you can
Author: (Deleted User)
Date: 21 Apr 2005 05:37 PM
you need variable to remember the first hot topic. then skip it in second loop. try the following.

<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<xsl:variable name="group" select="sys_AssemblerInfo/RelatedContent/linkurl/Value[contains(@current,'type=Policy')]"/>
<xsl:variable name="firstHot" select="$group[contains(@current,'chkHot=Y')][1]"/>

<li class="highlight">
<xsl:copy-of select="document($firstHot/@current)"/>
</li>


<xsl:for-each select="$group[@current != $firstHot/@current]">
<li>
<xsl:copy-of select="document(@current)."/>
</li>
</xsl:for-each>
</xsl:template>

</xsl:stylesheet>

Postnext
Rick SmithSubject: This is a tough one - I am so stuck! Please help if you can
Author: Rick Smith
Date: 22 Apr 2005 02:21 PM
Originally Posted: 22 Apr 2005 02:20 PM
Song,<br> Thanks for your tremendous help on my XSL problem. I could not have done it without you. My final code looked like this.<br> Thanks again!<br> Rick<br> <br> <xsl:variable name="firstPolicyHot" select="document(linkurl/Value/@current[contains(.,'type=Policy') and contains(.,'chkHot=Y')])[1]"/><br> <br> <ul><br> <li class="highlight"><br> <xsl:copy-of select="$firstPolicyHot"/><br> </li><br> <xsl:for-each select="document(linkurl/Value/@current[contains(.,'type=Executive+Director')])"><br> <xsl:if test="$firstPolicyHot!= ."><br> <li><xsl:copy-of select="."/></li><br> </xsl:if><br> </xsl:for-each><br> </ul>

Posttop
(Deleted User) Subject: This is a tough one - I am so stuck! Please help if you can
Author: (Deleted User)
Date: 22 Apr 2005 03:56 PM
Rick,

Glad to know it helps. Enjoy Stylus Studio!

song
Stylus Studio Team

 
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.