xsl-list
[Top] [All Lists]

RE: Finding parent of the middle child

2005-06-22 23:51:52
You don't want

//*[position() ... ]

you want

(//*)[position() ... ]

I'm sure the difference has already been explained on this thread.

Michael Kay
http://www.saxonica.com/
 

-----Original Message-----
From: Brook Ellingwood [mailto:belling(_at_)rei(_dot_)com] 
Sent: 23 June 2005 01:25
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: RE: [xsl] Finding parent of the middle child

Recap: There are several section elements containing a 
variable number of child elements. I want to return a count 
of all the child elements and identify the mid point of all 
the child elements. I then want to split the parent section 
elements after the parent containing the middle child.

I have this working on my local machine using MSXML, but it 
fails when I convert it on the staging servers using Xalan 
Java 2.4.1 and I'm stumped.

Relevant XSL:
<xsl:variable name="gearMid" 
select="generate-id((//rec_gear_sec/*)[round(count(//rec_gear_
sec/*) div 2)])"/>

<xsl:template name="rec_gear_list">
      <xsl:for-each select="//rec_gear_sec/*">
              <xsl:if test="generate-id(.) = $gearMid">
                      <xsl:variable name="splitPoint" 
select="count(../preceding-sibling::*) +1"/>
                      <div style="width:275; 
float:left;padding-right:10px;">
                              <xsl:apply-templates 
select="//*[position() &lt; $splitPoint and name()='rec_gear_sec']"/>
                              <xsl:apply-templates 
select="parent::*"/>
                      </div>
                      <div style="width:285; float:right;">
                              <xsl:apply-templates 
select="//*[position() &gt; $splitPoint and name()='rec_gear_sec']"/>
                      </div>
              </xsl:if>
      </xsl:for-each>
</xsl:template>

That for-each is probably a little inefficient, but the real 
problem is the output. In Xalan it gets the group in the 
first div right, but in the second div it gives me *all* the 
rec_gear_sec elements, not just the ones with a position() 
greater than $splitPoint. It seems like this is a bug, and I 
could really use a workaround. I've already spent far more 
time on this one than it deserves. Any ideas?

-- Brook

Sample XML:

      <rec_gear_sec>
              <rec_gear_title>Official Papers</rec_gear_title>
              <rec_gear>Valid passport and visas</rec_gear>
              <rec_gear>Airline tickets</rec_gear>
              <rec_gear>International health card with 
immunizations</rec_gear>
      </rec_gear_sec>
      <rec_gear_sec>
              <rec_gear_title>Clothing</rec_gear_title>
              <rec_gear>Midweight wool or fleece 
jacket/sweater</rec_gear>
              <rec_gear>Wool or fleece pants</rec_gear>
              <rec_gear>Midweight thermal underwear top and 
bottom, synthetic</rec_gear>
              <rec_gear>Expedition weight thermal underwear 
top and bottom, synthetic</rec_gear>
              <rec_gear>T-shirts, mix of synthetic and 
cotton</rec_gear>
              <rec_gear>Long-sleeve synthetic shirts</rec_gear>
              <rec_gear>Synthetic, quick-drying hiking 
shorts</rec_gear>
              <rec_gear>Synthetic, quick-drying hiking 
pants</rec_gear>
              <rec_gear>Underwear</rec_gear>
              <rec_gear>Hiking socks - wool and/or 
synthetic</rec_gear>
              <rec_gear>Liner socks</rec_gear>
      </rec_gear_sec>
      <rec_gear_sec>
              <rec_gear_title>Outerwear</rec_gear_title>
              <rec_gear>Waterproof, breathable jacket</rec_gear>
              <rec_gear>Waterproof, breathable pants</rec_gear>
              <rec_gear>Insulated down or synthetic filled 
jacket</rec_gear>
              <rec_gear>Wind jacket and/or pants (optional) 
</rec_gear>
      </rec_gear_sec>
      <rec_gear_sec>
              <rec_gear_title>Footwear</rec_gear_title>
              <rec_gear>Water-resistant leather hiking boots, 
midweight boots work great</rec_gear>
              <rec_gear>Camp shoes - sneakers or sport 
sandals</rec_gear>
      </rec_gear_sec>
      <rec_gear_sec>
              <rec_gear_title>Clothing Accessories</rec_gear_title>
              <rec_gear>Balaclava or neck gaiter</rec_gear>
              <rec_gear>Wool or fleece mittens/gloves</rec_gear>
              <rec_gear>Thin gloves or mitten liners</rec_gear>
              <rec_gear>Wool or fleece hat</rec_gear>
              <rec_gear>Gaiters, knee-length</rec_gear>
              <rec_gear>Sun hat </rec_gear>
      </rec_gear_sec>
      <rec_gear_sec>
              <rec_gear_title>City Clothing</rec_gear_title>
              <rec_gear>Bring a few lightweight, easily 
washable items for travel and when you are not climbing</rec_gear>
              <rec_gear>Comfortable shoes</rec_gear>
      </rec_gear_sec>
      <rec_gear_sec>
              <rec_gear_title>Travel Accessories</rec_gear_title>
              <rec_gear>Water bottles (two 1-quart) or a 
hydration system plus one 1 qt. water bottle</rec_gear>
              <rec_gear>Headlamp and spare lithium 
batteries/bulb (no flashlights!)</rec_gear>
              <rec_gear>Sunglasses with dark lenses</rec_gear>
              <rec_gear>Ski goggles</rec_gear>
              <rec_gear>Toilet paper (1 roll)</rec_gear>
              <rec_gear>Hand sanitizer gel</rec_gear>
              <rec_gear>Collapsible trekking poles</rec_gear>
              <rec_gear>Favorite energy snacks and powdered 
drinks</rec_gear>
              <rec_gear>Sunblock and lip balm with high SPF</rec_gear>
              <rec_gear>Toiletry kit</rec_gear>
              <rec_gear>Small bath towel</rec_gear>
              <rec_gear>Bio-degradable soap/shampoo</rec_gear>
              <rec_gear>Personal first-aid kit</rec_gear>
              <rec_gear>Rain cover and two large plastic 
trash bags for your daypack and duffel bag </rec_gear>
      </rec_gear_sec>
      <rec_gear_sec>
              <rec_gear_title>Field Gear</rec_gear_title>
              <rec_gear>Sleeping bag rated to 10°F or less </rec_gear>
      </rec_gear_sec>
      <rec_gear_sec>
              <rec_gear_title>Optional Field Gear</rec_gear_title>
              <rec_gear>Camera, lenses and lots of film</rec_gear>
              <rec_gear>Small binoculars (highly 
recommended)</rec_gear>
              <rec_gear>Reading and writing materials</rec_gear>
              <rec_gear>Watch with alarm or travel clock</rec_gear>
              <rec_gear>Folding-style umbrella</rec_gear>
              <rec_gear>Earplugs</rec_gear>
              <rec_gear>Bandanna</rec_gear>
              <rec_gear>Water filter equipment or iodine 
tablets (bottled water available for purchase)</rec_gear>
              <rec_gear>Insect repellent with DEET</rec_gear>
              <rec_gear>Spare contact lenses or prescription 
glasses</rec_gear>
              <rec_gear>Ziploc bags, to protect camera, 
binoculars, etc. from dust</rec_gear>
      </rec_gear_sec>
      <rec_gear_sec>
              <rec_gear_title>Luggage</rec_gear_title>
              <rec_gear>2 duffel bags, 1 large enough for all 
climbing gear and clothing and a second bag with non climbing 
items to be left at the hotel</rec_gear>
              <rec_gear>Luggage tags and luggage locks</rec_gear>
              <rec_gear>Passport pouch or money belt</rec_gear>
              <rec_gear>Daypack, 2000-3000 cu. in. to be used 
during climb</rec_gear>
      </rec_gear_sec>

--~------------------------------------------------------------------
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>
--~--