Subject: RE: [xsl] Finding parent of the middle child From: "Brook Ellingwood" <belling@xxxxxxx> Date: Thu, 23 Jun 2005 09:34:51 -0700 |
I had originally used (//*)[position() ... ], but with that syntax MSXML doesn't find any nodes before the split point and puts all the nodes after it. I hadn't tested on Xalan before, but now that I have I see it's working properly. Not a good situation to work around a bug in your dev environment that doesn't exist in production. Thanks, -- Brook -----Original Message----- From: Michael Kay [mailto:mike@xxxxxxxxxxxx] Sent: Wednesday, June 22, 2005 11:52 PM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: RE: [xsl] Finding parent of the middle child 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@xxxxxxx] > Sent: 23 June 2005 01:25 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > 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() < $splitPoint and name()='rec_gear_sec']"/> > <xsl:apply-templates > select="parent::*"/> > </div> > <div style="width:285; float:right;"> > <xsl:apply-templates > select="//*[position() > $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 100F 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>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Finding parent of the mid, Michael Kay | Thread | [xsl] Hiding XML to an application , Angel Gavin |
Re: [xsl] Performance Problem Quest, George Cristian Bina | Date | RE: [xsl] Performance Problem Quest, Andreas Guther |
Month |