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

Re: Big long xpath, almost there, but not quite

Subject: Re: Big long xpath, almost there, but not quite
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Thu, 16 Apr 2009 14:38:18 -0400
Re:  Big long xpath
Russ,

At 02:02 PM 4/16/2009, you wrote:
I want to thank everybody for their help on this. Michael Kay, thaks for your help very much. I entered the following Xpath. It is getting there, but it still is not quite right.

//GenTable[count(entry[Emphasis[normalize-space(.) = 'Address Offset' and @type='bold'] or
Emphasis[normalize-space(.)='Physical Address' and @type='bold'] or
Emphasis[normalize-space(.)='Instance' and @type='bold'] or
Emphasis[normalize-space(.)='Description' and @type='bold'] or
Emphasis[normalize-space(.)='Type' and @type='bold'] ]) >= 4]


When i use this, as i would like at least 4 entry element that match the conditions above, hopefully 5, i would think this should do the trick and return the GenTable elements that contain them.

When i run it, however, i get no GenTable elements. When i remove the count() function, i get no GenTable elements. When i change the 4 9the minimum match value, to something smaller like 1) i get no GenTable elements. When i change the number 4 to 0, i get ALL the GenTable elements.

The fact that you get all your GenTable elements when your count is >= 0, but none of them when your count >= 1, indicates that your count is 0 for all of them. In turn, this suggests your conditionals are wrong in some systematic way.


I'll rephrase your XPath in a way that is more or less the same, but a bit more legible. (I say "more or less" since one thing I'm doing is removing the normalize-space() munging; if you need it you can put it back but it complicates things for purposes of explanation. But none of my other changes are meaningful.)

//GenTable[count(child::entry
  [child::Emphasis[@type='bold'][.='Address Offset'] or
   child::Emphasis[@type='bold'][.='Physical Address'] or
   child::Emphasis[@type='bold'][.='Instance'] or
   child::Emphasis[@type='bold'][.='Description'] or
   child::Emphasis[@type='bold'][.='Type'] ] )
           >= 4]

So ... it's collecting all GenTable elements that have at least four entry children meeting the following criterion: they must all have at least one Emphasis child of @type='bold' and with a value (whitespace-normalized, as you had it) of "Address Offset", "Physical Address", "Instance", "Description" or "Type".

But evidently you have none, and indeed you haven't got any GenTable elements with even one entry child meeting this test.

Just guessing wildly (sorry, I didn't save your data sample), I expect that the relations among the elements isn't right. Do GenTable elements have entry children (a table with entries but not rows)? Do entry elements have Emphasis children?

Maybe instead of 'child::entry' you want 'descendant::entry' (shorthand: './/entry') or '*/entry' (short for 'child::*/child::entry') or 'row/entry'.

Additionally, there's (at least) one other thing you can do to make the path more concise, even as it stands:

//GenTable[count(entry
  [Emphasis[@type='bold']
           [(.='Address Offset') or
            (.='Physical Address') or
            (.='Instance') or
            (.='Description') or
            (.='Type') ] )
           >= 4]

... and, were you able to use XPath 2.0 (and putting the normalize-space() back):

//GenTable[count(entry
[Emphasis[@type='bold']
[normalize-space(.)=('Address Offset', 'Physical Address', 'Instance',
'Description', 'Type') ] )
>= 4]


Cheers,
Wendell



======================================================================
Wendell Piez                            mailto:wapiez@xxxxxxxxxxxxxxxx
Mulberry Technologies, Inc.                http://www.mulberrytech.com
17 West Jefferson Street                    Direct Phone: 301/315-9635
Suite 207                                          Phone: 301/315-9631
Rockville, MD  20850                                 Fax: 301/315-8285
----------------------------------------------------------------------
  Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================

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-2013 All Rights Reserved.