У меня есть XML-документ с именем employee.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
, которая удалит невыбранные атрибуты. Например, оставьте только first_name
и last_name
в XML-документе:
<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 ... не является подтипом element () ..." Я изменил код:
let $rows:= doc("employees.xml")//row
return
local:my-remove-elements($rows, ('first_name', 'last_name'))
на этот раз все еще: "err: XPTY0004: фактическое количество элементов для параметра 1 не соответствует количеству элементов в сигнатуре функции ...". Вы знаете, как это исправить и заставить работать?