Xml 如何在XQuery结果中限制退货订单?
这是一个新手问题。我最近才开始学习XQuery和XPath 考虑一下这个XMLXml 如何在XQuery结果中限制退货订单?,xml,xpath,xquery,basex,Xml,Xpath,Xquery,Basex,这是一个新手问题。我最近才开始学习XQuery和XPath 考虑一下这个XML <employees> <employee empid="1"> <ename>KING</ename> <mgr></mgr> <hiredate>17-11-1981</hiredate> </employee> <employe
<employees>
<employee empid="1">
<ename>KING</ename>
<mgr></mgr>
<hiredate>17-11-1981</hiredate>
</employee>
<employee empid="2">
<ename>BLAKE</ename>
<mgr>7839</mgr>
<hiredate>1-5-1981</hiredate>
<test>
<sub1>one</sub1>
<sub2>two</sub2>
</test>
</employee>
</employees>
我得到了
empid="1"
<ename>KING</ename>
<hiredate>17-11-1981</hiredate>
<sub1>empid1-one</sub1>
empid="2"
<ename>BLAKE</ename>
<hiredate>1-5-1981</hiredate>
<sub1>empid2-one</sub1>
<sub2>empid2-two</sub2>
empid=“1”
国王
17-11-1981
empid1-1
empid=“2”
布莱克
1-5-1981
empid2-1
empid2-2
我希望得到的结果是
empid="1"
<ename>KING</ename>
<sub1>empid1-one</sub1>
<hiredate>17-11-1981</hiredate>
empid="2"
<ename>BLAKE</ename>
<sub1>empid2-one</sub1>
<hiredate>1-5-1981</hiredate>
<sub2>empid2-two</sub2>
empid=“1”
国王
empid1-1
17-11-1981
empid=“2”
布莱克
empid2-1
1-5-1981
empid2-2
我希望结果顺序以return子句的顺序为基础
有人能给我指一下正确的方向吗?谢谢实际上,XQuery不会更改您指定的返回值的顺序。您所观察到的是由于这样一个事实,即您的代码在循环通过
test
元素之前,首先专门循环通过所有employee
元素,在$db/(/employees/employee,/employees/employeed/test)中说
假设一名员工
只能有一个测试
子项,您可以尝试以下方法:
let $db := db:open("example", "documents/employee.xml")
for $item in $db/employees/employee
let $empid := $item/@empid
let $ename := $item/ename
let $sub1 := $item/test/sub1
let $hiredate := $item/hiredate
let $sub2 := $item/test/sub2
return ($empid,$ename,$sub1,$hiredate,$sub2)
实际上,XQuery不会更改您指定的返回值的顺序。您所观察到的是由于这样一个事实,即您的代码在循环通过test
元素之前,首先专门循环通过所有employee
元素,在$db/(/employees/employee,/employees/employeed/test)中说
假设一名员工
只能有一个测试
子项,您可以尝试以下方法:
let $db := db:open("example", "documents/employee.xml")
for $item in $db/employees/employee
let $empid := $item/@empid
let $ename := $item/ename
let $sub1 := $item/test/sub1
let $hiredate := $item/hiredate
let $sub2 := $item/test/sub2
return ($empid,$ename,$sub1,$hiredate,$sub2)
har07已经给出了一个很好的答案,接受这个答案,而不是我的。作为补充,属性节点在没有父元素的情况下无法输出。可以按如下方式更改属性变量:
let $empid := $item/@empid/concat(name(), '=', ., ' ')
如果您更关心换行而不是只关心空白行:
let $empid := $item/@empid/concat(' ',name(), '=', ., ' ')
输出将是
<?xml version="1.0" encoding="UTF-8"?>
empid=1
<ename>KING</ename>
<hiredate>17-11-1981</hiredate>
empid=2
<ename>BLAKE</ename>
<sub1>one</sub1>
<hiredate>1-5-1981</hiredate>
<sub2>two</sub2>
empid=1
<ename>KING</ename>
<hiredate>17-11-1981</hiredate>
empid=2
<ename>BLAKE</ename>
<sub1>one</sub1>
<hiredate>1-5-1981</hiredate>
<sub2>two</sub2>
为了摆脱声明。这应该适用于最新版本的BaseX。然后,输出将是
<?xml version="1.0" encoding="UTF-8"?>
empid=1
<ename>KING</ename>
<hiredate>17-11-1981</hiredate>
empid=2
<ename>BLAKE</ename>
<sub1>one</sub1>
<hiredate>1-5-1981</hiredate>
<sub2>two</sub2>
empid=1
<ename>KING</ename>
<hiredate>17-11-1981</hiredate>
empid=2
<ename>BLAKE</ename>
<sub1>one</sub1>
<hiredate>1-5-1981</hiredate>
<sub2>two</sub2>
empid=1
国王
17-11-1981
empid=2
布莱克
一
1-5-1981
二
har07已经给出了一个很好的答案,接受这个答案,而不是我的。作为补充,属性节点在没有父元素的情况下无法输出。可以按如下方式更改属性变量:
let $empid := $item/@empid/concat(name(), '=', ., ' ')
如果您更关心换行而不是只关心空白行:
let $empid := $item/@empid/concat(' ',name(), '=', ., ' ')
输出将是
<?xml version="1.0" encoding="UTF-8"?>
empid=1
<ename>KING</ename>
<hiredate>17-11-1981</hiredate>
empid=2
<ename>BLAKE</ename>
<sub1>one</sub1>
<hiredate>1-5-1981</hiredate>
<sub2>two</sub2>
empid=1
<ename>KING</ename>
<hiredate>17-11-1981</hiredate>
empid=2
<ename>BLAKE</ename>
<sub1>one</sub1>
<hiredate>1-5-1981</hiredate>
<sub2>two</sub2>
为了摆脱声明。这应该适用于最新版本的BaseX。然后,输出将是
<?xml version="1.0" encoding="UTF-8"?>
empid=1
<ename>KING</ename>
<hiredate>17-11-1981</hiredate>
empid=2
<ename>BLAKE</ename>
<sub1>one</sub1>
<hiredate>1-5-1981</hiredate>
<sub2>two</sub2>
empid=1
<ename>KING</ename>
<hiredate>17-11-1981</hiredate>
empid=2
<ename>BLAKE</ename>
<sub1>one</sub1>
<hiredate>1-5-1981</hiredate>
<sub2>two</sub2>
empid=1
国王
17-11-1981
empid=2
布莱克
一
1-5-1981
二
这不起作用,因为属性节点不附加到任何对象。让$empid:=$item/@empid/concat(name(),'=',,,,,,,
;')
怎么样?这不起作用,因为属性节点不附加到任何东西。让$empid:=$item/@empid/concat(name(),'=',,,,,,
;')
怎么样?