XML.orgXML.org
FOCUS AREAS |XML-DEV |XML.org DAILY NEWSLINK |REGISTRY |RESOURCES |ABOUT
OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]
Re: [xml-dev] dynamic xpath eval in xquery?

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@lists.xml.org
> subscribe: xml-dev-subscribe@lists.xml.org
> 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]


News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 1993-2007 XML.org. This site is hosted by OASIS