Showing posts with label myxml. Show all posts
Showing posts with label myxml. Show all posts

Friday, February 24, 2012

Help with XQuery

I'm trying to do my "Hello World" in XQuery and running into problems. Maybe you can advise.

DECLARE @.MyXML xml

SET @.MyXML = '<?xml version="1.0" encoding="ISO-8859-1" ?>

<bookstore><book category="COOKING">

<title lang="en">Everyday Italian</title>

<author>Giada De Laurentiis</author>

<year>2005</year>

<price>30.00</price>

</book><book category="CHILDREN">

<title lang="en">Harry Potter</title>

<author>J K. Rowling</author>

<year>2005</year>

<price>29.99</price>

</book><book category="WEB">

<title lang="en">XQuery Kick Start</title>

<author>James McGovern</author>

<author>Per Bothner</author>

<author>Kurt Cagle</author>

<author>James Linn</author>

<author>Vaidyanathan Nagarajan</author>

<year>2003</year>

<price>49.99</price>

</book><book category="WEB">

<title lang="en">Learning XML</title>

<author>Erik T. Ray</author>

<year>2003</year>

<price>39.95</price>

</book>

</bookstore>'

When I run this query in sql 2005 Query Editor I get the error message:

Msg 9332, Level 16, State 1, Line 41

XQuery [query()]: Syntax error near 'data', expected 'where', '(stable) order by' or 'return'.

SELECT @.myXml.query('

<booklist>

{

for $p in /bookstore/

where data($p/@.price) > 30.00

order by $p/title[1]

return $p/@.price

}

</booklist>

Any help appreciated,

Barkingdog

I assume you want to list all the book price > 30.00, order by book's title. If so, here is the query

SELECT @.myXml.query('

<booklist>

{

for $p in /bookstore/book

where data($p/price) > 30.00

order by $p/title[1]

return $p/price

}

</booklist>')