Subject: Re: current context preceding-sibling then following-sibling
From: Karl Stubsjoen <kstubs@xxxxxxxxx>
Date: Mon, 7 Mar 2005 12:33:26 -0700
|
Did the following message ever make the list? I posted this a few days back.
current context preceding-sibling then following-sibling
On Fri, 4 Mar 2005 08:14:19 -0700, Karl Stubsjoen <kstubs@xxxxxxxxx> wrote:
> Hello,
>
> I have complex xpath query which I need help with. Let me first jump
> to the question which appears to be the hangup:
>
> the context of the following-sibling following a preceding-sibling
> should result you in the context of the current sibling?
>
> Often times with a problem like this there is another or better
> approach. I may have reached the point where I need to try another
> approach. However, I am so close to the correct solution that I wish
> to persue this just a bit further. Let me see if I can explain what
> it is I am trying to accomplish:
>
> The short of it is, I am comparing the preceding-sibling with the
> current. The preceding-sibling must contain the code "XYZ" when the
> current contains the code "WXY".
>
> You derive the code to match by a code lookup which is part of the XML
> source. So, for current you can determine what the
> preceding-sibling's code should be by first looking in the code
> section at the top of the source.
>
> So, code "WXY" is only valid when the preceding-sibling is code "XYZ"
> (as an example).
>
> A mock up XML:
>
> <ROOT>
> <CODES>
> <CODE name="WXY">
> <MATCH>XYZ</MATCH>
> </CODE>
> </CODES>
> <RESULTS>
> <RESULT code="XYZ" />
> <RESULT code="WXY"/>
> </RESULTS>
> </ROOT>
>
> You might be asking why preceding-sibling followed by following-sibling:
> Because the RESULT code for current is actually an ID which is
> resolved in CODE lookup above (not shown here) ... well, let me just
> add the actual xpath expressions here and maybe it will be easier to
> understand...
>
> My "hard coded method" works perfectly...
>
> HARD CODED METHOD:
> =====================================================
> /root/recordset[@rsName='Memberships']/record[field[@fieldname='RefEntryActivityID']=
> ( 33 )]/preceding-sibling::record[field[@fieldname='ExitActivityValue']
> = ( 'W4' ) ]
>
> Each value within the ( ) needs to be replaced with an appropriate
> xpath statement.
>
> So, the first ( 33 ) above is replaced with the following:
>
> /root/recordset[@rsName='Codes']/record[field[@fieldname='Section']= (
> 209 )]/field[@fieldname='ID']
>
> This XPATH still works great but now I need to replace the ( 209 ),
> but this is not really an issue so we'll skip to the ( 'W4' ).
>
> The ( 'W4' ) is replaced with:
>
> /root/recordset[@rsName='Codes']/record[field[@fieldname='ID']= ( 33
> )]/field[@fieldname='Match']
>
> Now, it is this next ( 33 ) which is the problem! This value is
> really the current siblings RefEntryActivityID, which the current
> sibling is now out of context? (that is a question). Notice that ( 33
> ) is part of the right hand side of a preceding-sibling. So, couldn't
> I just go following-sibling at this point? Which doesn't appear to be
> working... Here are my 3 attempts at getting this ( 33 ) value from
> the original current context (none work):
>
> 33 = field[@fieldname='RefEntryActivityID']
> 33 = ./field[@fieldname='RefEntryActivityID']
> 33 = following-sibling::record/field[@fieldname='RefEntryActivityID']
>
> Thanks for the help!
>
> Karl
|