1

我有一个 XML 文档:

<resultsets>
    <row>
        <emp_no>10001</emp_no>
        <first_name>Georgi</first_name>
        <last_name>Facello</last_name>
    </row>
    <row>
        <emp_no>10002</emp_no>
        <first_name>Bezalel</first_name>
        <last_name>Simmel</last_name>
    </row>
</resultset>

我想使用 FLWOR 编写一个 xQuery 来提取 emp_no 和 first_name,其中 emp_no 是 10001,对应的名字如下:

<row>
     <emp_no>10001</emp_no>
     <first_name>Georgi</first_name>
</row>

我写的代码:

for $id in doc("employees.xml")//emp_no
for $first in doc("employees.xml")//first_name
where ($id/text() = '10001')
return 
    <row>
    <id>{upper-case($id/text())}</id>
    <first>{$first/text()}</first>
    </row> 

但是,它返回 $id 和 $first 的笛卡尔积,

<row>
    <emp_no>10001</emp_no>
    <first_name>Georgi</first_name>
</row>
<row>
    <emp_no>10001</emp_no>
    <first_name>Bezalel</first_name>
</row>

您知道如何使用 xQuery FLWOR 解决此问题吗?谢谢!

4

1 回答 1

0

我会简单地选择row然后对emp_no孩子使用 where 子句:

for $row in /resultsets/row
where $row/emp_no = '10001'
return
    <row>
        <id>{$row/emp_no/data()}</id>
        <first>{$row/first_name/data()}</first>
    </row>

http://xqueryfiddle.liberty-development.net/bFukv89

目前尚不清楚是否要将元素名称从emp_notoid和 from first_nameto更改first,如果不需要,您当然可以简单地复制它们:

for $row in /resultsets/row
where $row/emp_no = '10001'
return
    <row>
        {$row/emp_no, $row/first_name}
    </row>

http://xqueryfiddle.liberty-development.net/bFukv89/1

于 2018-02-15T21:30:45.300 回答