我有一个名为 employees.xml 的 XML 文档:
<employees>
<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>
</employees>
我想编写一个名为的函数my-remove-elements
,它将删除未选择的属性。例如,只在 XML 文档中保留first_name
和:last_name
<employees>
<row>
<first_name>Georgi</first_name>
<last_name>Facello</last_name>
</row>
<row>
<first_name>Bezalel</first_name>
<last_name>Simmel</last_name>
</row>
</employees>
我的函数的定义是:
declare function local:my-remove-elements($input as element(), $remove-names as xs:string*) as element() {
element {node-name($input) }
{$input/@*,
for $child in $input/node()[name(.)=$remove-names]
return
if ($child instance of element())
then local:my-remove-elements($child, $remove-names)
else $child
}
};
这就是我所说的方式:
let $doc := doc("employees.xml")
return
local:my-remove-elements($doc, ('first_name', 'last_name'))
它抛出我“err:XPTY0004 ...不是元素()的子类型......”我已经更改了代码:
let $rows:= doc("employees.xml")//row
return
local:my-remove-elements($rows, ('first_name', 'last_name'))
这次仍然是:“err:XPTY0004: 参数 1 的实际基数与函数签名中的基数不匹配......”。你知道如何解决这个问题并让它发挥作用吗?