[xquery-talk] string manipulation
jsnelson at sleepycat.com
Sun Feb 5 17:51:32 PST 2006
Unfortunatley, the predicate "[1 to last() - 1]" will not work, since
the predicate only selects the node at the numeric position when given
an expression that returns a /single/ numeric value. "1 to last() - 1"
will return a sequence of numeric values.
In order to do what you want, you will need to use "fn:subsequence()":
string-join(subsequence(tokenize("book/title/author", "/"), 1, last() -
Instead of that, you could also try:
replace("book/title/author", "/.*?$", "")
let $str := "book/title/author" return
substring-before($str, concat("/", substring-after($str, "/")))
I'm sure there are other good ways to acheive the result you want.
Ryan Grimm wrote:
> Fortunately XQuery has some really cool string manipulation functions.
> One way to accomplish what you are looking for is:
> string-join(tokenize("book/title/author", "/")[1 to last() - 1], "/")
> This might look a bit more complicated then expected but it really isn't
> bad if you break it down.
> The tokenize() function will split up a string into tokens based on the
> second argument. So tokenize("book/title/author", "/") will return a
> sequence of three tokens ("book", "title", "author"). The [1 to last()
> - 1] part is going to select the first of these tokens through the
> second to last one. This will leave you with a sequence of: ("book",
> "title"). Lastly we can join that sequence back together with the
> string-join() function thus adding back in the /'s.
> This will always strip off the rest of the string after the last "/"
> regardless of how many /'s there are. So if you have something like:
> book/title/pubdate/author you will get back: book/title/pubdate.
> Hope that helps.
> On Feb 4, 2006, at 11:05 PM, fatma helmy wrote:
>> dear all
>> i am trying to use string manipulation in xquery to
>> truncate the last part of a string for example
>> suppose my string is book/title/author i need to
>> truncate starting from the last / so it will become
>> book/title only , i need to do this for varied length
>> Do You Yahoo!?
>> Tired of spam? Yahoo! Mail has the best spam protection around
>> talk at xquery.com
> talk at xquery.com
John Snelson, Berkeley DB XML Engineer
Sleepycat Software, Inc
Contracted to Sleepycat through Parthenon Computing Ltd
More information about the talk