[Home] [By Thread] [By Date] [Recent Entries]

  • From: John Snelson <john.snelson@o...>
  • To: James Fuller <james.fuller.2007@g...>
  • Date: Tue, 09 Oct 2007 12:21:14 +0100

Hi James,

There is no standard function in XQuery that will evaluate another 
XQuery stored in a string - although some XQuery implementations provide 
extension functions to do this.

Depending on your needs, it's not too hard to write your own function to 
handle simple cases, like this:

declare function local:evalPath($path as xs:string, $xml as node()*) as 
node()*
{
   local:evalPathImpl(tokenize($path, "/"), $xml)
};

declare function local:evalPathImpl($steps as xs:string*, $xml as 
node()*) as node()*
{
   if(empty($steps)) then $xml
   else if($steps[1] = "") then local:evalPathImpl(subsequence($steps, 
2), $xml/root())
   else if(starts-with($steps[1], "@")) then 
local:evalPathImpl(subsequence($steps, 2), $xml/@*[name() = 
substring($steps[1], 2)])
   else local:evalPathImpl(subsequence($steps, 2), $xml/*[name() = 
$steps[1]])
};

let $xml := document { <test><a><b attr="value"></b></a></test> }

let $xpathstring := "/test/a/b/@attr"

return local:evalPath($xpathstring, $xml)

John

James Fuller wrote:
> given in xquery v1.0
> 
> let $xml := <test><a><b></b></a>
> 
> let $xpathstring := ''test/a/b"
> 
> return $xml/$xpathstring
> 
> I know this is not possible ;) ... though I am having a brain cramp...
> 
> wondering what the best approach for doing this type of thing in XQuery.
> 
> tia, Jim Fuller
> 
> _______________________________________________________________________
> 
> XML-DEV is a publicly archived, unmoderated list hosted by OASIS
> to support XML implementation and development. To minimize
> spam in the archives, you must subscribe before posting.
> 
> [Un]Subscribe/change address: http://www.oasis-open.org/mlmanage/
> Or unsubscribe: xml-dev-unsubscribe@l...
> subscribe: xml-dev-subscribe@l...
> List archive: http://lists.xml.org/archives/xml-dev/
> List Guidelines: http://www.oasis-open.org/maillists/guidelines.php
> 


-- 
John Snelson, Oracle Corporation
Berkeley DB XML:        http://www.oracle.com/database/berkeley-db/xml
XQilla:                                  http://xqilla.sourceforge.net


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]


Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member