[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: small grouping task

Subject: Re: small grouping task
From: Fred Christian <fredc@xxxxxxxxxx>
Date: Thu, 26 Feb 2009 12:24:11 -0800
Re:  small grouping task
Thanks Ken for the help.
Now I know what specs I need to add. Your second xsl example comes close, you almost read my mind. I will try to add the rest of the requirements succinctly.
I am using Saxon and a xsl 2.0 solution is great.
> 2), the other making the assumption that each list item is all of the content (except <br/>) that follows each <input/>
Correct. But the first <br/> Not more.


Another valid assumption is, After the <br/>

Other things to make work are.
-a- There are random text and tags between the '<p class="problem">' and the first <input>...<br/> pair.
-b- There are text and tags after that last <input>... <br/> pair and the closing </p>
Those need to be preserved.


In your second xsl, the "-a-" items were removed from the output. And the "-b-" items were wrapped with the last </li> and </ul>. The last </li></ul> needs to end sooner.

Thanks for getting me close. I will see if I can figure it out, and if you are able to try again, that would be awesome.

Note my new source a few more tags
Maybe the <p class="problem"> is just a distraction?? But the <input>'s will always be children of the <p class="problem">
--------------------------------------------------------------------
<r>
<p>text</p>
<randomtag>surronding xhtml</randomtag>
<p class="problem">some <b>xhtml</b> with<br/> no inputs<br/>
<input type="radio" /> <span class="p">a</span><b>d </b><br />
<input type="radio" /> <b>g </b><span class="p">b</span><br />
<p>more</p> generic <b>xhtml</b> with<br/> no inputs<img src="l"/>
</p>
<b>a</b>surronding xhtml<b>b</b>
</r>


---------------------------------------------

desired output. Only the <input>.....<br/> pairs are altered
--------------------------------------------------------------------
<r>
   <p>text</p>
   <randomtag>surronding xhtml</randomtag>
<p class="problem">some <b>xhtml</b> with<br/> no inputs<br/>
 <ul class="m">
  <li class="m"> <span class="p">a</span><b>d </b></li>
  <li class="m"> <b>g </b><span class="p">b</span></li>
 </ul>
   <p>more</p> generic <b>xhtml</b> with<br/> no inputs<img src="l"/>
</p>
<b>a</b>surronding xhtml<b>b</b>
</r>
------------------------------------------------------------------------------


current incorrect output, note: has missing items and misplaced items. ---------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<r>
   <p>text</p>
   <randomtag>surronding xhtml</randomtag>
  <ul class="m">
     <li class="m">
        <span class="p">a</span>
        <b>d </b>
     </li>
     <li class="m">
        <b>g </b>
        <span class="p">b</span>
        <p>more</p> generic <b>xhtml</b> with no inputs<img src="l"/>
     </li>
  </ul>
  <b>a</b>surronding xhtml<b>b</b>
</r>


---------------------------------------------------------


current stylesheet (same as Ken's)
----------------------------------
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
               version="2.0">

<xsl:output indent="yes"/>

<xsl:template match="p[@class = 'problem' and input]">
 <!--start the list-->
 <ul class="m">
   <!--find the members of the list, assuming multiple items per member-->
   <xsl:for-each-group select="node()" group-starting-with="input">
     <xsl:if test="self::input"><!--found a group with an input-->
       <li class="m">
         <!--copy everything except <br/> elements-->
         <xsl:apply-templates select="current-group()[position()>1]
                                                     [not(self::br)]"/>
       </li>
     </xsl:if>
   </xsl:for-each-group>
 </ul>
</xsl:template>

<xsl:template match="@*|node()"><!--identity for all other nodes-->
 <xsl:copy>
   <xsl:apply-templates select="@*|node()"/>
 </xsl:copy>
</xsl:template>

</xsl:stylesheet>

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2011 All Rights Reserved.