Wol*_*'08 7 xml xquery xquery-3.0
我尝试过几件事:
for $name in ('Hanz', 'Heinz', 'Hans', 'Huns', 'Hund')
where $name contains text 'Hans' using fuzzy
return $name | $name
(: returns error: Stopped at line 3, column 20: [XPTY0004]
Union expression: node() expected, xs:string found. :)
for $name in ('Hanz', 'Heinz', 'Hans', 'Huns', 'Hund')
where $name contains text 'Hans' using fuzzy
return $name and $name
(: returns true :)
for $name in ('Hanz', 'Heinz', 'Hans', 'Huns', 'Hund')
where $name contains text 'Hans' using fuzzy
return $name, $name
(: returns error: Stopped at line 3, column 19: [XPST0008]
Undefined variable $name. :)
Run Code Online (Sandbox Code Playgroud)
我想要做的只是返回两次名称变量.当然,我想做一些更复杂的事情.例如,给定一个doc(取自w3):
<?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>
Run Code Online (Sandbox Code Playgroud)
我已经尝试执行一些我在Stack Overflow中接受的答案中看到的查询,并且我已经产生了负面结果.例如:
let $sep := ','
for $x in doc('test')/bookstore
where fn:matches($x/book, 'XC')
return fn:string-join( ($x/book/title/text(), $x/book/author/text(),
$x/book/price/text()), $sep)
(: Stopped at line 3, column 31: [XPTY0004] Single item expected,
(element book { ... }, element book { ... }, ...) found. :)
Run Code Online (Sandbox Code Playgroud)
-
我想返回任何类别属性等于"web"的书籍的作者,年份和标题,这是一个标题元素,其语言属性为英语,其值正好是"Learining XML",其任何子项包含文本"Erik T"; 或其年份晚于2003年,其任何后代包含文本XML,其价格低于20.00美元.
我认为这显示了XQuery的多功能性.如果不能返回并实际输入目标列表,则该软件基本上是无用的.我发现没有一个可靠的答案或教程甚至涵盖上述查询的一小部分; 但是,有关于如何进行数学比较和顺序功能的查询.这些都以他们自己的方式有用,但是开始时,它们并不像根据其中发现的结果返回表的多个列那么重要.
Jen*_*rat 13
在第三次尝试中你已经非常接近,只是括号丢失了:
for $name in ('Hanz', 'Heinz', 'Hans', 'Huns', 'Hund')
where $name contains text 'Hans' using fuzzy
return ($name, $name)
Run Code Online (Sandbox Code Playgroud)
您可以按此顺序返回任意变量.
警告:XQuery不知道嵌套序列,如果你这样做,它们就会被连接起来.如果需要嵌套序列,则必须构造一个将返回的XML树,例如.
return <names>
<name>{$name}</name>
<name>{$name}</name>
</names>
Run Code Online (Sandbox Code Playgroud)
这个不包含任何序列,但它应该显示模式.
| 归档时间: |
|
| 查看次数: |
24597 次 |
| 最近记录: |