xmlbeans-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Siegfried Baiz <b...@sulzer.de>
Subject Re: selectPath with FilterExpression using $this (works with XmlBeans 2.2.0 with SaxonB-8.6.1)
Date Thu, 14 Sep 2006 08:37:38 GMT
Hi Lawrence,

at last I found the time to follow your suggestion:
* Update to XmlBeans 2.2.0 with SaxonB-8.6.1 *

"selectPath with FilterExpression using $this" seems working now!

Thanks for your Help (and sorry for the very late Feedback)

Cheers Siggi


Lawrence Jones schrieb:
> Hi Siggi
>
> I've tried this out under 2.1.0 with SaxonB-8.1 and regardless of the
> presence or absence of saxon8-jdom.jar I can now repro the same error
> you see - the ArrayIndexOutOfBoundsException.
>
> The problem appears to be the reference to $this in the XPath - if I
> take that out then I get valid results.
>
> I've tried setting things a little differently in the context object
> that we pass into the Saxon code - but unfortunately nothing that I did
> made any difference and I don't know enough about Saxon to fix it.
>
> So either you can upgrade to the latest XmlBeans code and use
> SaxonB-8.6.1 - in that case I don't see this issue and you can use the
> $this variable fine. (Unfortunately you cannot use XmlBeans 2.1.0 with
> SaxonB-8.6.1 - they changed the names of some of the Saxon classes - so
> you need revision 378309 or later).
>
> Or you can do something like the following:
>
> 1. navigate to the FRAME element of interest
> 2. then do frameXmlObj.selectPath(".//@idRef") to get back an array of
> XmlObjects containing just the idRef values within that FRAME element
> 3. get the text value of the idRef attributes by calling (on each
> element of the array)
>
>     XmlCursor subCursor = xmlObj.newCursor(); 
>     subCursor.getTextValue(); 
>     subCursor.dispose();
>
> 4. put all such values into a HashSet (to remove duplicates)
> 5. foreach idRef string from the HashSet do
>
>     xPath = "//SIGNAL[@id='" + idRef + "']";
>     XmlObject[] results = wholeDocXmlObj.selectPath(xPath);
>
> (maybe there's a way to say "@id is one of a list of values" in XPath -
> in which case that would be quicker than the approach I've suggested
> above - I don't know enough XPath to know).
>
> 6. Combine the results into 1 XmlObject[] array
>
> All I'm really doing here is using XmlBeans to evaluate the list of
> @idRef attributes instead of XPath.
>
> This is obviously not as nice as just setting up the XPath to do it for
> you - but I can't seem to find a way to make Saxon 8.1 recognize the
> $this variable without the ArrayIndexOutOfBoundsException.
>
> Cheers,
>
> Lawrence
>
>   
>> -----Original Message-----
>> From: Lawrence Jones
>> Sent: Thursday, April 06, 2006 11:17 AM
>> To: user@xmlbeans.apache.org
>> Subject: RE: selectPath with FilterExpression using $this
>>
>> Hi Siggi
>>
>> The version I've been trying this out on is the latest XmlBeans
>>     
> version
>   
>> built from source which, as of revision 378309, downloads
>>     
> SaxonB-8.6.1.
>   
>> It gets downloaded from
>> http://easynews.dl.sourceforge.net/sourceforge/saxon/saxonb8-6-1.zip
>>
>> Prior to that (and for version 2.1.0 of XmlBeans) we were downloading
>> SaxonB-8.1 from
>> http://easynews.dl.sourceforge.net/sourceforge/saxon/saxonb8-1.zip.
>>
>> And, as you say, we only extracted saxon8.jar from that zip (although
>>     
> I
>   
>> don't think that we actually include saxon8.jar in the XmlBeans zip -
>> instead I think there are instructions to download it yourself if you
>> want to). Also, as you say, saxon8-jdom.jar is available in that zip
>>     
> and
>   
>> it can't hurt to try putting it on the classpath and see if it makes a
>> difference to you.
>>
>> Unfortunately I'm not a Saxon expert - so I don't know what the cause
>>     
> of
>   
>> the ArrayIndexOutOfBoundsException is but I hope the above helps.
>>
>> Cheers,
>>
>> Lawrence
>>
>>     
>>> -----Original Message-----
>>> From: Siegfried Baiz [mailto:baiz@sulzer.de]
>>> Sent: Thursday, April 06, 2006 3:30 AM
>>> To: user@xmlbeans.apache.org
>>> Subject: Re: selectPath with FilterExpression using $this
>>>
>>> Lawrence,
>>>
>>> thanks for your very interest! I've tried to do exactly like you.
>>>
>>> For your first approach
>>>     xmlObj.selectPath("//FUNCTION[.//SIGNAL-REF[@idRef='sig4']]");
>>> I get realy good results.
>>>
>>> ---------------
>>>
>>> Trying to fit the second use-case
>>> ("finding which SIGNAL nodes are referred to by a given  FRAME")
>>> by launching
>>>     frameXmlObj.selectPath("//*[@id=$this//@idRef]");
>>> unfortunatlly keeps on ending in the following exception:
>>>
>>>     java.lang.ArrayIndexOutOfBoundsException: 1
>>>     at
>>>
>>>       
> net.sf.saxon.expr.XPathContextMajor.setLocalVariable(XPathContextMajor.j
>   
>> av
>>     
>>> a:213)
>>>     at
>>>       
> net.sf.saxon.expr.LetExpression.iterate(LetExpression.java:60)
>   
>>>     at
>>>       
>> net.sf.saxon.xpath.XPathEvaluator.evaluate(XPathEvaluator.java:183)
>>     
>>>     at
>>>
>>>       
> org.apache.xmlbeans.impl.xpath.saxon.XBeansXPath.selectNodes(XBeansXPath
>   
>> .j
>>     
>>> ava:95)
>>>     at
>>>
>>>       
> org.apache.xmlbeans.impl.xpath.saxon.XBeansXPath.selectPath(XBeansXPath.
>   
>> ja
>>     
>>> va:105)
>>>     at
>>>
>>>       
> org.apache.xmlbeans.impl.store.Path$SaxonPathImpl$SaxonPathEngine.next(P
>   
>> at
>>     
>>> h.java:496)
>>>     at
>>>       
>> org.apache.xmlbeans.impl.store.Cursor._toSelection(Cursor.java:919)
>>     
>>>     at
>>>
>>>       
> org.apache.xmlbeans.impl.store.Cursor._toNextSelection(Cursor.java:908)
>   
>>>     at
>>>
>>>       
> org.apache.xmlbeans.impl.store.Cursor._hasNextSelection(Cursor.java:900)
>   
>>>     at
>>>
>>>       
> org.apache.xmlbeans.impl.store.Cursor.hasNextSelection(Cursor.java:2640)
>   
>>>     at
>>>
>>>       
> org.apache.xmlbeans.impl.values.XmlObjectBase.selectPath(XmlObjectBase.j
>   
>> av
>>     
>>> a:432)
>>>
>>> ---------------
>>>
>>> Maybe the problem is caused - as you mentioned earlier - by the
>>>       
>> missing
>>     
>>> saxon8-dom.jar.
>>> In the actual XML-Beans-Release I found only saxon8-jdom.jar but not
>>> saxon8-dom.jar.
>>> ( i.e. neither in xmlbeans-2.1.0.zip nor in the corresponding
>>> xmlbeans-current-src.zip)
>>> Do you know from where to get it?
>>>
>>> Cheers
>>>
>>> Siggi
>>>
>>> --------------------------------------------------
>>> Dipl.-Math. (Univ.)
>>> Siegfried Baiz
>>> Sulzer GmbH
>>> Frankfurter Ring 162, D-80807 Muenchen
>>> Tel.: +49 89 31858-264
>>> Fax : +49 89 31858-599
>>> mailto:baiz@sulzer.de
>>> --------------------------------------------------
>>>
>>>
>>>
>>> Lawrence Jones wrote:
>>>
>>>       
>>>> Hi Siggi
>>>>
>>>> I had a try at this and it seemed to work to me.
>>>>
>>>> To select, say, all FUNCTION nodes in the whole document which
>>>>         
>> contain
>>     
>>>> at least one SIGNAL-REF element whose idRef attribute has a
>>>>         
>> particular
>>     
>>>> value (say 'sig4'), parse the document into an XmlObject and call
>>>>         
> (on
>   
>>>> that same XmlObject):
>>>>
>>>> xmlObj.selectPath("//FUNCTION[.//SIGNAL-REF[@idRef='sig4']]");
>>>>
>>>> You will get an array of FUNCTION nodes. If you wanted only the
>>>> SIGNAL-REF nodes which match 'sig4' you would do something like
>>>>         
> this:
>   
>>>> xmlObj.selectPath("//FUNCTION//SIGNAL-REF[@idRef='sig4']");
>>>>
>>>> Similarly for FRAME nodes.
>>>>
>>>> Finding which SIGNAL nodes are referred to by a given (e.g.) FRAME
>>>>         
> is
>   
>>>> slightly different. Having gotten the XmlObject that represents the
>>>> whole document first create an XmlCursor using newCursor(), then
>>>> navigate to the FRAME of interest. Then do cursor.getObject(). That
>>>>         
>> will
>>     
>>>> give you an XmlObject representing that FRAME element. You can then
>>>> call:
>>>>
>>>> frameXmlObj.selectPath("//*[@id=$this//@idRef]");
>>>>
>>>> This will return all nodes within the whole document having an
>>>>         
>> attribute
>>     
>>>> called id which has the same value as any of the idRef attributes
>>>>         
> in
>   
>>>> _any descendant_ of this node (this node being the FRAME node).
>>>>
>>>> If you want to be even more precise you could do something like
>>>>         
> this:
>   
>>>> frameXmlObj.selectPath("//SIGNAL[@id=$this//@idRef]");
>>>>
>>>> which will return all SIGNAL nodes within the whole document having
>>>>         
>> an
>>     
>>>> attribute called id which has the same value as any of the idRef
>>>> attributes in _any descendant_ of this node (this node being the
>>>>         
>> FRAME
>>     
>>>> node).
>>>>
>>>> (If you wanted to, you could adopt the same approach to the first
>>>> example I gave and replace the hardcoded 'sig4' with navigating to
>>>>         
>> the
>>     
>>>> SIGNAL node and passing in $this/@id instead of 'sig4').
>>>>
>>>> Hope that helps. As I say I'm not really an XPath expert and this
>>>>         
> is
>   
>>>> really becoming more about XPath than about XmlBeans.
>>>>
>>>> Cheers,
>>>>
>>>> Lawrence
>>>>
>>>>
>>>>
>>>>         
>>>>> -----Original Message-----
>>>>> From: Siegfried Baiz [mailto:baiz@sulzer.de]
>>>>> Sent: Tuesday, April 04, 2006 1:36 AM
>>>>> To: user@xmlbeans.apache.org
>>>>> Subject: Re: selectPath with FilterExpression using $this
>>>>>
>>>>> Lawrence,
>>>>>
>>>>> My Xml-Document looks somehow like this:
>>>>> <SAMPLE-FRAG>
>>>>> <ELEMENTS>
>>>>>  <FRAMES>
>>>>>   <FRAME>
>>>>>    <SIGNAL-INSTANCE>
>>>>>     <SIGNAL-REF idRef="sig1"/>
>>>>>    </SIGNAL-INSTANCE>
>>>>>    <SIGNAL-INSTANCE>
>>>>>     <SIGNAL-REF idRef="sig2"/>
>>>>>    </SIGNAL-INSTANCE>
>>>>>   </FRAME>
>>>>>   <FRAME>
>>>>>    <SIGNAL-INSTANCE>
>>>>>     <SIGNAL-REF idRef="sig2"/>
>>>>>    </SIGNAL-INSTANCE>
>>>>>    <SIGNAL-INSTANCE>
>>>>>     <SIGNAL-REF idRef="sig3"/>
>>>>>    </SIGNAL-INSTANCE>
>>>>>    <SIGNAL-INSTANCE>
>>>>>     <SIGNAL-REF idRef="sig4"/>
>>>>>    </SIGNAL-INSTANCE>
>>>>>   </FRAME>
>>>>>  </FRAMES>
>>>>>  <FUNCTIONS>
>>>>>   <FUNCTION>
>>>>>    <INPUT-PORT>
>>>>>     <SIGNAL-REF idRef="sig1"/>
>>>>>    </INPUT-PORT>
>>>>>    <OUTPUT-PORT>
>>>>>     <SIGNAL-REF idRef="sig2"/>
>>>>>    </OUTPUT-PORT>
>>>>>    <OUTPUT-PORT>
>>>>>     <SIGNAL-REF idRef="sig4"/>
>>>>>    </OUTPUT-PORT>
>>>>>   </FUNCTION>
>>>>>   <FUNCTION>
>>>>>    <INPUT-PORT>
>>>>>     <SIGNAL-REF idRef="sig2"/>
>>>>>    </INPUT-PORT>
>>>>>    <INPUT-PORT>
>>>>>     <SIGNAL-REF idRef="sig3"/>
>>>>>    </INPUT-PORT>
>>>>>    <OUTPUT-PORT>
>>>>>     <SIGNAL-REF idRef="sig4"/>
>>>>>    </OUTPUT-PORT>
>>>>>   </FUNCTION>
>>>>>  </FUNCTIONS>
>>>>>  <SIGNALS>
>>>>>   <SIGNAL id="sig1"/>
>>>>>   <SIGNAL id="sig2"/>
>>>>>   <SIGNAL id="sig3"/>
>>>>>   <SIGNAL id="sig4"/>
>>>>>  </SIGNALS>
>>>>> </ELEMENTS>
>>>>> </SAMPLE-FRAG>
>>>>>
>>>>> I'm generally interested in resolving relations between
>>>>> the tree containers FUNCTIONS, FRAMES and SIGNALS.
>>>>>
>>>>> For example:
>>>>> 	Which FUNCTION- rsp. FRAME-Nodes refer to given Signal?
>>>>> 	Which SIGNAL-Nodes are refererd by a given FRAME rsp. FUNCTION?
>>>>>
>>>>>
>>>>> By the way I've  checked my classpath:
>>>>> It contains saxon8.jar but not saxon8-dom.jar.
>>>>>
>>>>> Thanks and Cheers,
>>>>>
>>>>> Siggi
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Lawrence  Jones  wrote:
>>>>>
>>>>>
>>>>>
>>>>>           
>>>>>> I  too  have  had  a  go  at  this,  but  I  too  am  not  an
>>>>>>             
>> XPath
>>     
>>>>>>             
>>>>> expert.
>>>>>
>>>>>
>>>>>           
>>>>>> First  of  all  make  sure  you  have  _all  of_  saxon8.jar  and
>>>>>>
>>>>>>
>>>>>>             
>>>>> saxon8-dom.jar
>>>>>
>>>>>
>>>>>           
>>>>>> and  xbean_xpath.jar  (in  addition  to  the  normal  xbean.jar
>>>>>>             
>> and
>>     
>>>>>>             
>>>> the
>>>>
>>>>
>>>>         
>>>>> JSR  173
>>>>>
>>>>>
>>>>>           
>>>>>> jar)  on  your  classpath.  Not  having  saxon8-dom.jar  can
>>>>>>             
> cause
>   
>>>>>>             
>>>>> strange
>>>>>
>>>>>
>>>>>           
>>>>>> errors.  Not  having  xbean_xpath.jar  just  means  that  no
>>>>>>             
> XPath
>   
>>>>>>             
>>>> will
>>>>
>>>>
>>>>         
>>>>> work.
>>>>>
>>>>>
>>>>>           
>>>>>> Other  than  that  I  think  it  might  just  be  that  we're
>>>>>>             
> not
>   
>>>>>>             
>>>>> passing  in  the
>>>>>
>>>>>
>>>>>           
>>>>>> right  XPath.  Siegfried,  can  you  attach  an  example  XML
>>>>>>
>>>>>>
>>>>>>             
>>>> instance
>>>>
>>>>
>>>>         
>>>>> document
>>>>>
>>>>>
>>>>>           
>>>>>> for  which  you  are  expecting  this  to  work?
>>>>>>
>>>>>> Here's  the  one  I  tried:
>>>>>>
>>>>>> <elem1  xmlns=\"http://laj.org/test\"  >
>>>>>> <elem11  id=\"123\"  >text11</elem11>
>>>>>> <elem21  id=\"456\"  >text11</elem21>
>>>>>> <elem12  idRef=\"123\"  />
>>>>>> <elem13  idRef=\"456\"  />
>>>>>> <elem14  idRef=\"123\"  />
>>>>>> <elem15  idRef=\"456\"  />
>>>>>> <elem16  idRef=\"123\"  />
>>>>>> <elem17  idRef=\"789\"  />
>>>>>> </elem1>
>>>>>>
>>>>>> And  here  are  the  issues  I  see.
>>>>>>
>>>>>> 1.  The  element  on  which  you  perform  the  selectPath()
>>>>>>             
> call
>   
>>>>>>             
>>>> seems
>>>>
>>>>
>>>>         
>>>>> to
>>>>>
>>>>>
>>>>>           
>>>>>> represent  the  root  as  far  as  the  call  to  selectPath()
>>>>>>             
> is
>   
>>>>>>             
>>>>> concerned.  So
>>>>>
>>>>>
>>>>>           
>>>>>> if  e.g.  you  passed  in  only  the  XmlObject  for  <elem11>
>>>>>>             
>> above
>>     
>>>>>>             
>>>>> you  should
>>>>>
>>>>>
>>>>>           
>>>>>> not  expect  any  of  the  other  elements  to  be  returned
>>>>>>
>>>>>>
>>>>>>             
>>>> regardless
>>>>
>>>>
>>>>         
>>>>> of  the
>>>>>
>>>>>
>>>>>           
>>>>>> XPath  passed  in.
>>>>>>
>>>>>> 2.  But  it  is  likely  that  the  elements  with  idRef  in
>>>>>>             
> them
>   
>>>>>>             
>>>> are
>>>>
>>>>
>>>>         
>>>>> _not_
>>>>>
>>>>>
>>>>>           
>>>>>> children  of  the  element  with  id  in  them.  Rather  it  is
>>>>>>
>>>>>>
>>>>>>             
>>>> likely
>>>>
>>>>
>>>>         
>>>>> that  they
>>>>>
>>>>>
>>>>>           
>>>>>> are  all  members  of  some  larger  document  element  such  as
>>>>>>
>>>>>>
>>>>>>             
>>>> <elem1>
>>>>
>>>>
>>>>         
>>>>> above.
>>>>>
>>>>>
>>>>>           
>>>>>> So  to  get  the  selectPath()  to  even  consider  them  you
>>>>>>             
>> would
>>     
>>>>>>             
>>>>> need  to  pass
>>>>>
>>>>>
>>>>>           
>>>>>> in  the  XmlObject  for  <elem1>  (or  at  least  some  element
>>>>>>             
>> that
>>     
>>>>>>             
>>>> is
>>>>
>>>>
>>>>         
>>>>> a  root  to
>>>>>
>>>>>
>>>>>           
>>>>>> all  of  the  results  you  expect).
>>>>>>
>>>>>> 3.  But  then  the  path  to  the  id  attribute  is  no  longer
>>>>>>
>>>>>>
>>>>>>             
>>>>> $this/@id  as  that
>>>>>
>>>>>
>>>>>           
>>>>>> would  only  match  the  _root_  element  (<elem1>  in  this
>>>>>>             
> case)
>   
>>>>>>             
>>>>> having  an  id
>>>>>
>>>>>
>>>>>           
>>>>>> attribute.  Exactly  what  you  need  to  pass  in  depends  on
>>>>>>             
>> what
>>     
>>>>>>             
>>>>> you  want  to
>>>>>
>>>>>
>>>>>           
>>>>>> do  -  if  you  want  to  find  all  idRefs  that  match  _any_
>>>>>>             
> id
>   
>>>>>>             
>>>>> attribute
>>>>>
>>>>>
>>>>>           
>>>>>> anywhere  in  the  document  then  you  probably  want
>>>>>>             
> $this//@id
>   
>>>>>>             
>>>>> instead.
>>>>>
>>>>>
>>>>>           
>>>>>> 4.  I  tried  the  XPath  //*[@idRef=$this//@id]  on  the
>>>>>>             
> complete
>   
>>>>>>             
>>>>> document
>>>>>
>>>>>
>>>>>           
>>>>>> above  (i.e.  I  executed  selectPath()  on  the  XmlObject
>>>>>>
>>>>>>
>>>>>>             
>>>> representing
>>>>
>>>>
>>>>         
>>>>>> <elem1>)  and  printed  out  the  list  of  XmlObjects  returned
>>>>>>
>>>>>>
>>>>>>             
>>>> from
>>>>
>>>>
>>>>         
>>>>>> selectPath().  I  got:
>>>>>>
>>>>>> Number  of  results  =  5
>>>>>> results[0]  =  <xml-fragment  idRef="123"/>
>>>>>> results[1]  =  <xml-fragment  idRef="456"/>
>>>>>> results[2]  =  <xml-fragment  idRef="123"/>
>>>>>> results[3]  =  <xml-fragment  idRef="456"/>
>>>>>> results[4]  =  <xml-fragment  idRef="123"/>
>>>>>>
>>>>>> which  is  what  I'd  expect  i.e.  I  get  all  the  nodes  with
>>>>>>             
>> an
>>     
>>>>>>             
>>>>> idRef  that
>>>>>
>>>>>
>>>>>           
>>>>>> matches  any  id  attribute  somewhere  else  in  the  document
>>>>>>             
>> (and
>>     
>>>>>>             
>>>> I
>>>>
>>>>
>>>>         
>>>>> don't  get
>>>>>
>>>>>
>>>>>           
>>>>>> those  that  do  not  match).  Not  sure  why  they  are
>>>>>>
>>>>>>
>>>>>>             
>>>> xml-fragment's
>>>>
>>>>
>>>>         
>>>>> rather
>>>>>
>>>>>
>>>>>           
>>>>>> than  proper  individual  elements  with  proper  QNames  but
>>>>>>             
>> that's
>>     
>>>>>>             
>>>> a
>>>>
>>>>
>>>>         
>>>>>> different  issue.
>>>>>>
>>>>>> 5.  Note  that  replacing  '$this'  with  '.'  (i.e.  XPath  =
>>>>>>
>>>>>>
>>>>>>             
>>>>> //*[@idRef=.//@id)
>>>>>
>>>>>
>>>>>           
>>>>>> gave  me  an  empty  result  set.  My  guess  is  that  '.'  is
>>>>>>
>>>>>>
>>>>>>             
>>>>> evaluated
>>>>>
>>>>>
>>>>>           
>>>>>> dynamically  (i.e.  it  means  the  current  node  that  the
>>>>>>             
> query
>   
>>>>>>             
>>>> has
>>>>
>>>>
>>>>         
>>>>> evaluated
>>>>>
>>>>>
>>>>>           
>>>>>> to)  compared  to  $this  which  is  bound  statically  at  the
>>>>>>
>>>>>>
>>>>>>             
>>>>> beginning  to  the
>>>>>
>>>>>
>>>>>           
>>>>>> root  node  that  you  pass  in.  (With  the  '.'  version  of
>>>>>>             
> the
>   
>>>>>>             
>>>>> XPath  I  think
>>>>>
>>>>>
>>>>>           
>>>>>> you  are  looking  for  a  node  which  has  both  an  id  and
>>>>>>             
> an
>   
>>>>>>             
>>>> idRef
>>>>
>>>>
>>>>         
>>>>> attribute
>>>>>
>>>>>
>>>>>           
>>>>>> where  the  values  are  the  same  -  which  is  a  slightly
>>>>>>
>>>>>>
>>>>>>             
>>>> different
>>>>
>>>>
>>>>         
>>>>> query.)
>>>>>
>>>>>
>>>>>           
>>>>>> I  haven't  tried  this  exhaustively  -  I'm  not  sure  what
>>>>>>             
>> would
>>     
>>>>>>             
>>>>> happen  if
>>>>>
>>>>>
>>>>>           
>>>>>> some  of  the  id  or  idRef  attributes  were  on  elements  at
>>>>>>
>>>>>>
>>>>>>             
>>>> deeper
>>>>
>>>>
>>>>         
>>>>> levels.
>>>>>
>>>>>
>>>>>           
>>>>>> But  anyway  I  hope  that  helps  get  started.
>>>>>>
>>>>>> Cheers,
>>>>>>
>>>>>> Lawrence
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>>>> -----Original  Message-----
>>>>>>> From:  Radu  Preotiuc-Pietro
>>>>>>> Sent:  Thursday,  March  30,  2006  1:56  PM
>>>>>>> To:  user@xmlbeans.apache.org
>>>>>>> Subject:  RE:  selectPath  with  FilterExpression  using  $this
>>>>>>>
>>>>>>> I  was  curious  to  try  this  myself  with  the  new  Saxon
>>>>>>>               
> 8.6
>   
>>>>>>>               
>>>>> integration
>>>>>
>>>>>
>>>>>           
>>>>>>> (available  from  the  SVN  head  only,  for  the  moment)  and
>>>>>>>
>>>>>>>
>>>>>>>               
>>>> what  I
>>>>
>>>>
>>>>         
>>>>> found  is
>>>>>
>>>>>
>>>>>           
>>>>>>> that  the  path  you  are  suggesting  ("//*[@idref=./@id]")
>>>>>>>               
>> works
>>     
>>>>>>>               
>>>> (no
>>>>
>>>>
>>>>         
>>>>>>> exception)  but  for  some  reason  doesn't  return  anything.
>>>>>>>               
> On
>   
>>>>>>>               
>>>> the
>>>>
>>>>
>>>>         
>>>>> other
>>>>>
>>>>>
>>>>>           
>>>>>>> hand,  "//*[@idref='1'"  returns  the  expected  result,  so  on
>>>>>>>
>>>>>>>
>>>>>>>               
>>>> one
>>>>
>>>>
>>>>         
>>>>> hand  I
>>>>>
>>>>>
>>>>>           
>>>>>>>               
>>>>>> am
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>>>> wondering  if  this  is  maybe  a  bug  in  the  free  version
>>>>>>>               
> of
>   
>>>>>>>               
>>>>> Saxon  and  on
>>>>>
>>>>>
>>>>>           
>>>>>>>               
>>>>>> the
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>>>> other  you  can  use  this  to  workaround  the  problem  by
>>>>>>>               
>> doing
>>     
>>>>>>> .selectPath("//*[@idref='"  +  node.getId()  +  "'").
>>>>>>>
>>>>>>> If  anyone  else  has  other  insights  into  why  the  original
>>>>>>>
>>>>>>>
>>>>>>>               
>>>> path
>>>>
>>>>
>>>>         
>>>>> does  not
>>>>>
>>>>>
>>>>>           
>>>>>>> work  (with  more  Xpath/Saxon  knowledge),  I'd  also  be
>>>>>>>
>>>>>>>
>>>>>>>               
>>>> interested
>>>>
>>>>
>>>>         
>>>>> to
>>>>>
>>>>>
>>>>>           
>>>>>>>               
>>>>>> know.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>>>> Thanks,
>>>>>>> Radu
>>>>>>>
>>>>>>> -----Original  Message-----
>>>>>>> From:  Cezar  Andrei
>>>>>>> Sent:  Wednesday,  March  29,  2006  3:30  PM
>>>>>>> To:  user@xmlbeans.apache.org
>>>>>>> Subject:  RE:  selectPath  with  FilterExpression  using  $this
>>>>>>>
>>>>>>> Hi  Siegfried,
>>>>>>>
>>>>>>> I'm  not  an  expert  in  xpath/xquery  but  I'm  pretty  sure
>>>>>>>               
>> that
>>     
>>>>>>>               
>>>>> $this
>>>>>
>>>>>
>>>>>           
>>>>>>>               
>>>>>> doesn't
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>>>> represent  the  internal  current  node  that  is  processed  by
>>>>>>>
>>>>>>>
>>>>>>>               
>>>> the
>>>>
>>>>
>>>>         
>>>>> engine.
>>>>>
>>>>>
>>>>>           
>>>>>>> So  you'll  probably  want  to  rewrite  the  expression  to
>>>>>>>
>>>>>>>
>>>>>>>               
>>>> something
>>>>
>>>>
>>>>         
>>>>> like
>>>>>
>>>>>
>>>>>           
>>>>>>> this:
>>>>>>> xo.selectPath(".//*[@idRef=.//@id]");
>>>>>>>
>>>>>>> As  for  $this,  it's  just  a  variable  that  is  bound  to
>>>>>>>               
> the
>   
>>>>>>>               
>>>>> XmlObject  that
>>>>>
>>>>>
>>>>>           
>>>>>>> you  are  calling  the  selectPath  method  from.  The  '$this'
>>>>>>>
>>>>>>>
>>>>>>>               
>>>>> construction
>>>>>
>>>>>
>>>>>           
>>>>>>>               
>>>>>> is
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>>>> not  in  the  latest  XPath/Xquery  spec  so  it  was
>>>>>>>               
> deprecated,
>   
>>>>>>>               
>>>>> instead  "."
>>>>>
>>>>>
>>>>>           
>>>>>>> should  be  used.
>>>>>>>
>>>>>>> The  current  XmlObject  can  be  bound  to  any  user
>>>>>>>               
> specified
>   
>>>>>>>               
>>>>> variable  name
>>>>>
>>>>>
>>>>>           
>>>>>>> as  in  the  following  example:
>>>>>>>
>>>>>>>     XmlOptions  options  =  new  XmlOptions();
>>>>>>>     options.setXqueryCurrentNodeVar("myVariable");
>>>>>>>     XmlObject[]  res  =  xo.selectPath("declare  variable
>>>>>>>
>>>>>>>
>>>>>>>               
>>>> $myVariable
>>>>
>>>>
>>>>         
>>>>>>> external;  $myVariable//el1",  options);
>>>>>>>
>>>>>>> Which  is  equivalent  to:
>>>>>>>
>>>>>>>     XmlObject[]  res  =  xo.selectPath(".//el1",  options);
>>>>>>>
>>>>>>> And  to  the  following  (since  in  the  context  of  the
>>>>>>>               
> xpath
>   
>>>>>>>               
>>>>> engine  the  xo
>>>>>
>>>>>
>>>>>           
>>>>>>>               
>>>>>> is
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>>>> considered  the  root):
>>>>>>>
>>>>>>>     XmlObject[]  res  =  xo.selectPath("//el1",  options);
>>>>>>>
>>>>>>> Since  we  don't  control  Saxon,  we  can't  promise  that
>>>>>>>
>>>>>>>
>>>>>>>               
>>>> expressions
>>>>
>>>>
>>>>         
>>>>>>> confirming  to  the  spec  will  work.  We  can  only  work  on
>>>>>>>
>>>>>>>
>>>>>>>               
>>>> making
>>>>
>>>>
>>>>         
>>>>> sure  we
>>>>>
>>>>>
>>>>>           
>>>>>>> make  the  right  calls  into  Saxon.
>>>>>>>
>>>>>>> Cezar
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>               
>>>>>>>> -----Original  Message-----
>>>>>>>> From:  Siegfried  Baiz  [mailto:baiz@sulzer.de]
>>>>>>>> Sent:  Tuesday,  March  14,  2006  12:11  PM
>>>>>>>> To:  user@xmlbeans.apache.org
>>>>>>>> Subject:  selectPath  with  FilterExpression  using  $this
>>>>>>>>
>>>>>>>> Hello,
>>>>>>>>
>>>>>>>> for  a  given  XmlObject  xo  with  an  ID-Attribute  'id',
>>>>>>>>                 
> I've
>   
>>>>>>>>                 
>>>>> tried  to
>>>>>
>>>>>
>>>>>           
>>>>>>>> launch  the  following  xpath-expression:
>>>>>>>>
>>>>>>>>   xo.selectPath("//*[@idRef=$this/@id]")
>>>>>>>>
>>>>>>>> in  order  to  get  all  nodes  (with  idRef-Attribute)
>>>>>>>>                 
> refering
>   
>>>>>>>>                 
>>>> to
>>>>
>>>>
>>>>         
>>>>> my  node
>>>>>
>>>>>
>>>>>           
>>>>>>>>                 
>>>>>>> xo.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>               
>>>>>>>> Unfortunatlly  this  expression  seems  not  to  work.  I
>>>>>>>>                 
> always
>   
>>>>>>>>                 
>>>> get
>>>>
>>>>
>>>>         
>>>>> an
>>>>>
>>>>>
>>>>>           
>>>>>>>> java.lang.ArrayIndexOutOfBoundsException  from  the  underlying
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>                 
>>> net.sf.saxon.expr.XPathContextMajor.setLocalVariable(XPathContextMajor
>>>       
>> .
>>     
>>>>>           
>>>> j
>>>>
>>>>
>>>>         
>>>>>>             
>>>>>>> av
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>               
>>>>>>>> a:213)
>>>>>>>>
>>>>>>>> At
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>                 
>>> http://xmlbeans.apache.org/docs/2.0.0/guide/conSelectingXMLwithXQueryP
>>>       
>> a
>>     
>>>>>           
>>>> t
>>>>
>>>>
>>>>         
>>>>>>             
>>>>>>> hX
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>               
>>>>>>>> Path.html
>>>>>>>> I  found  the  following  notice:
>>>>>>>> "Notice  in  the  query  expression  that  the  variable
>>>>>>>>                 
> $this
>   
>>>>>>>>
>>>>>>>>
>>>>>>>>                 
>>>>>>> represents
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>               
>>>>>>>> the  current  context  node  (the  XmlObject  that  you  are
>>>>>>>>
>>>>>>>>
>>>>>>>>                 
>>>>> querying
>>>>>
>>>>>
>>>>>           
>>>>>>>>                 
>>>>>>> from).
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>               
>>>>>>>> In  this  example  you  are  querying  from  the  document
>>>>>>>>                 
>> level
>>     
>>>>>>>>
>>>>>>>>
>>>>>>>>                 
>>>>>>> XmlObject."
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>               
>>>>>>>> After  reading  that  sentence  I've  been  thinking,  that
>>>>>>>>                 
>> $this
>>     
>>>>>>>>                 
>>>> is
>>>>
>>>>
>>>>         
>>>>>>>>                 
>>>>>> somehow
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>>>>> similar  to  "curent()"  in  XSLT,  but  maybe  a  got  the
>>>>>>>>
>>>>>>>>
>>>>>>>>                 
>>>> meaning
>>>>
>>>>
>>>>         
>>>>> wrong.
>>>>>
>>>>>
>>>>>           
>>>>>>>> Does  anyone  know  whats  the  problem  here  rsp.
>>>>>>>> is  there  a  better  way  to  accomplish  the  same  thing?
>>>>>>>>
>>>>>>>> Thanks  a  lot,
>>>>>>>>
>>>>>>>> Siggi
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>                 
>>>> ---------------------------------------------------------------------
>>>>         
>>>>>>
>>>>>>
>>>>>>             
>>>>>>>> To  unsubscribe,  e-mail:  user-unsubscribe@xmlbeans.apache.org
>>>>>>>> For  additional  commands,  e-mail:
>>>>>>>>                 
>> user-help@xmlbeans.apache.org
>>     
>>>>>>>>
>>>>>>>>
>>>>>>>>                 
>>>>>>>               
>>> ______________________________________________________________________
>>>       
>> _
>>     
>>>>>           
>>>>>>             
>>>>>>> Notice:  This  email  message,  together  with  any
>>>>>>>               
> attachments,
>   
>>>>>>>               
>>>> may
>>>>
>>>>
>>>>         
>>>>>>>               
>>>>>> contain
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>>>> information  of  BEA  Systems,  Inc.,  its  subsidiaries  and
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>               
>>>>>> affiliated
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>>>> entities,  that  may  be  confidential,  proprietary,
>>>>>>>               
> copyrighted
>   
>>>>>>>
>>>>>>>
>>>>>>>               
>>>>>> and/or
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>>>> legally  privileged,  and  is  intended  solely  for  the  use
>>>>>>>               
> of
>   
>>>>>>>               
>>>> the
>>>>
>>>>
>>>>         
>>>>>>>               
>>>>>> individual
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>>>> or  entity  named  in  this  message.  If  you  are  not  the
>>>>>>>
>>>>>>>
>>>>>>>               
>>>> intended
>>>>
>>>>
>>>>         
>>>>>>>               
>>>>>> recipient,
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>>>> and  have  received  this  message  in  error,  please
>>>>>>>               
>> immediately
>>     
>>>>>>>               
>>>>> return
>>>>>
>>>>>
>>>>>           
>>>>>>>               
>>>>>> this
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>>>> by  email  and  then  delete  it.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>               
>>>> ---------------------------------------------------------------------
>>>>         
>>>>>>             
>>>>>>> To  unsubscribe,  e-mail:  user-unsubscribe@xmlbeans.apache.org
>>>>>>> For  additional  commands,  e-mail:
>>>>>>>               
> user-help@xmlbeans.apache.org
>   
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>               
>>> ______________________________________________________________________
>>>       
>> _
>>     
>>>>>           
>>>>>>             
>>>>>>> Notice:  This  email  message,  together  with  any
>>>>>>>               
> attachments,
>   
>>>>>>>               
>>>> may
>>>>
>>>>
>>>>         
>>>>>>>               
>>>>>> contain
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>>>> information  of  BEA  Systems,  Inc.,  its  subsidiaries  and
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>               
>>>>>> affiliated
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>>>> entities,  that  may  be  confidential,  proprietary,
>>>>>>>               
> copyrighted
>   
>>>>>>>
>>>>>>>
>>>>>>>               
>>>>>> and/or
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>>>> legally  privileged,  and  is  intended  solely  for  the  use
>>>>>>>               
> of
>   
>>>>>>>               
>>>> the
>>>>
>>>>
>>>>         
>>>>>>>               
>>>>>> individual
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>>>> or  entity  named  in  this  message.  If  you  are  not  the
>>>>>>>
>>>>>>>
>>>>>>>               
>>>> intended
>>>>
>>>>
>>>>         
>>>>>>>               
>>>>>> recipient,
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>>>> and  have  received  this  message  in  error,  please
>>>>>>>               
>> immediately
>>     
>>>>>>>               
>>>>> return
>>>>>
>>>>>
>>>>>           
>>>>>>>               
>>>>>> this
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>>>> by  email  and  then  delete  it.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>               
>>>> ---------------------------------------------------------------------
>>>>         
>>>>>>             
>>>>>>> To  unsubscribe,  e-mail:  user-unsubscribe@xmlbeans.apache.org
>>>>>>> For  additional  commands,  e-mail:
>>>>>>>               
> user-help@xmlbeans.apache.org
>   
>>>>>>>
>>>>>>>
>>>>>>>               
>>> ______________________________________________________________________
>>>       
>> _
>>     
>>>>>           
>>>>>> Notice:  This  email  message,  together  with  any  attachments,
>>>>>>
>>>>>>
>>>>>>             
>>>> may
>>>>
>>>>
>>>>         
>>>>> contain
>>>>>
>>>>>
>>>>>           
>>>>>> information  of  BEA  Systems,  Inc.,  its  subsidiaries  and
>>>>>>
>>>>>>
>>>>>>             
>>>> affiliated
>>>>
>>>>
>>>>         
>>>>>> entities,  that  may  be  confidential,  proprietary,
>>>>>>             
> copyrighted
>   
>>>>>>             
>>>>> and/or
>>>>>
>>>>>
>>>>>           
>>>>>> legally privileged, and is intended solely for the use of the
>>>>>>
>>>>>>
>>>>>>             
>>>> individual
>>>>
>>>>
>>>>         
>>>>>> or entity named in this message. If you are not the intended
>>>>>>
>>>>>>
>>>>>>             
>>>> recipient,
>>>>
>>>>
>>>>         
>>>>>> and have received this message in error, please immediately
>>>>>>             
> return
>   
>>>>>>             
>>>> this
>>>>
>>>>
>>>>         
>>>>>> by email and then delete it.
>>>>>>
>>>>>>             
>>>> ---------------------------------------------------------------------
>>>>         
>>>>>> To unsubscribe, e-mail: user-unsubscribe@xmlbeans.apache.org
>>>>>> For additional commands, e-mail: user-help@xmlbeans.apache.org
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>> ---------------------------------------------------------------------
>>>       
>>>>> To unsubscribe, e-mail: user-unsubscribe@xmlbeans.apache.org
>>>>> For additional commands, e-mail: user-help@xmlbeans.apache.org
>>>>>
>>>>>
>>>>>           
>> _______________________________________________________________________
>>     
>>>> Notice:  This email message, together with any attachments, may
>>>>         
>> contain
>>     
>>>> information  of  BEA Systems,  Inc.,  its subsidiaries  and
>>>>         
>> affiliated
>>     
>>>> entities,  that may be confidential,  proprietary,  copyrighted
>>>>         
>> and/or
>>     
>>>> legally privileged, and is intended solely for the use of the
>>>>         
>> individual
>>     
>>>> or entity named in this message. If you are not the intended
>>>>         
>> recipient,
>>     
>>>> and have received this message in error, please immediately return
>>>>         
>> this
>>     
>>>> by email and then delete it.
>>>>
>>>>         
>> ---------------------------------------------------------------------
>>     
>>>> To unsubscribe, e-mail: user-unsubscribe@xmlbeans.apache.org
>>>> For additional commands, e-mail: user-help@xmlbeans.apache.org
>>>>
>>>>
>>>>
>>>>
>>>>         
>>>       
> ---------------------------------------------------------------------
>   
>>> To unsubscribe, e-mail: user-unsubscribe@xmlbeans.apache.org
>>> For additional commands, e-mail: user-help@xmlbeans.apache.org
>>>       
>>     
> _______________________________________________________________________
>   
>> Notice:  This email message, together with any attachments, may
>>     
> contain
>   
>> information  of  BEA Systems,  Inc.,  its subsidiaries  and
>>     
> affiliated
>   
>> entities,  that may be confidential,  proprietary,  copyrighted
>>     
> and/or
>   
>> legally privileged, and is intended solely for the use of the
>>     
> individual
>   
>> or entity named in this message. If you are not the intended
>>     
> recipient,
>   
>> and have received this message in error, please immediately return
>>     
> this
>   
>> by email and then delete it.
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@xmlbeans.apache.org
>> For additional commands, e-mail: user-help@xmlbeans.apache.org
>>     
>
> _______________________________________________________________________
> Notice:  This email message, together with any attachments, may contain
> information  of  BEA Systems,  Inc.,  its subsidiaries  and  affiliated
> entities,  that may be confidential,  proprietary,  copyrighted  and/or
> legally privileged, and is intended solely for the use of the individual
> or entity named in this message. If you are not the intended recipient,
> and have received this message in error, please immediately return this
> by email and then delete it.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@xmlbeans.apache.org
> For additional commands, e-mail: user-help@xmlbeans.apache.org
>
>
>   

Mime
View raw message