我无法找到以下解释.我已经制作了这个测试脚本以解决我之前的问题.
xquery version "3.0" ;
declare default function namespace 'local' ;
declare function local:is-img-only( $element as element() ) as xs:boolean {
($element/child::*[1] instance of element(img))
and (fn:not($element/child::*[2]))
and (fn:normalize-space($element) = '')
} ;
let $in-xml := <myxml>
<p id="1">
<img id="1"/>
</p>
<p id="2">
<img id="1"/>
hello
</p>
<p id="3">
<img id="1"/>
</p>
<p id="4">
<blockquote>hello</blockquote>
<img id="1"/>
</p>
<p id="5">
<img id="1"/>
<img id="2"/>
</p>
</myxml>
Run Code Online (Sandbox Code Playgroud)
然后,使用以下内容if then else:
for $p in $in-xml/p
return if …Run Code Online (Sandbox Code Playgroud) 我正在努力找到在休斯顿工作的员工,但项目所在的部门并不在休斯顿.我试图在FLWOR表达式的这个示例之后对表达式进行建模,但是查询没有返回任何内容,它应该返回结果.
编辑:这是输入.
xquery
let $doc := doc("~path/company.xml")
for $e in $doc//employee,
$d in $doc//department,
$p in $doc//projects
where $d/locations[location!="Houston"]
and $p/project[plocations="Houston"]
return <e>{$e/fname}{$e/lname}{$e/address}</e>
/
Run Code Online (Sandbox Code Playgroud) 我在SQLServer 2008 R2中有以下XML数据
DECLARE @data XML
SET @data = '<root attr1="val1" attr2="val2" attr3="val3"/>'
Run Code Online (Sandbox Code Playgroud)
我想从root获取属性名称列表,并将其作为元素列表输出,如下所示:
<root>
<attr1>val1</attr1>
<attr2>val2</attr2>
<attr3>val3</attr3>
</root>
Run Code Online (Sandbox Code Playgroud)
我一直在玩FLWOR查询以获得我想要的东西.到目前为止我有这个:
SELECT @data.query('
for $attr in /*/@*
return <test>{fn:string($attr)}</test>
')
Run Code Online (Sandbox Code Playgroud)
这很好,几乎是我需要的,但当我尝试这样做时......
SELECT @data.query('
for $attr in /*/@*
return <{fn:local-name($attr)}>{fn:string($attr)}</{fn:local-name($attr)}>
')
Run Code Online (Sandbox Code Playgroud)
它不开心.除了硬编码元素名称之外,它似乎不喜欢任何其他东西.
如何返回具有计算名称的元素?
我正在使用SQL Server 2008 R2.我的问题是我想要计算使用FLWOR从XQuery查询收到的点击次数.对于每次点击,我想要一个连续的数字,如:0,1,2,3,4 ......
我的查询:
select @xml.query('for $s at $count in /Root/Persons/Person
return <Person ID="{$count}">{$s}</Person>')
Run Code Online (Sandbox Code Playgroud)
这里唯一的问题是SQL Server不支持这个问题,我收到一个错误:
Msg 9335, Level 16, State 1, Line 16
XQuery [query()]: The XQuery syntax 'at' is not supported.
Run Code Online (Sandbox Code Playgroud)
我也尝试过let关键字并定义新变量,但我不知道如何在每次迭代时增加该变量的值?
感谢所有答案,弗伦基
问题背景
鉴于每个家庭的类别......
<?xml version="1.0" encoding="UTF-8"?>
<root>
<family>
<categories>
<cat id="1" />
<cat id="2" />
</categories>
</family>
<family>
<categories>
<cat id="3" />
<cat id="5" />
</categories>
</family>
<family>
<categories>
<cat id="3" />
<cat id="5" />
<cat id="6" />
</categories>
</family>
</root>
Run Code Online (Sandbox Code Playgroud)
我想要家庭最常见的类别......
<common-family-category id="3" count="2"/>
<common-family-category id="5" count="2"/>
Run Code Online (Sandbox Code Playgroud)
成功的尝试
我可以通过对每个迭代的id进行分组来实现该结果...
for $family-category-id in //family/categories/cat/@id
count $return-indexes
group by $family-category-id
order by count($return-indexes) descending
where count($return-indexes) > 1
return
<common-family-category id="{$family-category-id}" count="{count($return-indexes)}" />
Run Code Online (Sandbox Code Playgroud)
并且通过迭代每个类别并将id存储在变量中......
for $family-category in //family/categories/cat
let $family-category-id := $family-category/@id …Run Code Online (Sandbox Code Playgroud) 我有一个数组,我想用取自特定 XML 节点的字符串填充它,就像在这个伪代码示例中一样:
let $array := array {}
for $child in $collection
where contains(data($child), "Hey")
do $array := array:append($array, data($child))
Run Code Online (Sandbox Code Playgroud)
正确的代码如何执行这样的操作?
所以如果我有这个 XML
<root>
<child>Hey</child>
<child>Ho</child>
<child>Hey Ho</child>
</root>
Run Code Online (Sandbox Code Playgroud)
我希望数组是
array ["Hey", "Hey Ho"]
Run Code Online (Sandbox Code Playgroud) flwor ×6
xquery ×6
xml ×3
basex ×2
case ×1
if-statement ×1
sql-server ×1
xpath ×1
xpath-2.0 ×1
xquery-3.0 ×1
xquery-sql ×1