Description
The functx:remove-elements function removes child elements from the elements in $elements . The $names argument is a sequence of strings that represent child element names to remove. Prefixes can (and must) be used in the $names values for elements that are prefixed in the input documents (using the same prefix). You can also specify wildcard values "*", "*:" and ":*" in the second argument. See the description for functx:name-test for details.
The function does not remove all descendants, just children; see functx:remove-elements-deep to remove all descendants with the specified names.
Note: this function is intended to change the way elements appear in the results of a query, not to update them in an XML database. To update your XML database, you should use the implementation-specific update functions of your processor.
Arguments and Return TypeName | Type | Description |
$elements |
element()* |
the element(s) from which you wish to remove the children |
$names |
xs:string* |
the names of the child elements to remove |
return value |
element()* |
XQuery Function DeclarationSee XSLT definition. | declare namespace functx = "http://www.functx.com";
declare function functx:remove-elements
( $elements as element()* ,
$names as xs:string* ) as element()* {
for $element in $elements
return element
{node-name($element)}
{$element/@*,
$element/node()[not(functx:name-test(name(),$names))] }
} ; |
Exampleslet $in-xml-1 := | <in-xml>
<a>123</a>
<a>456</a>
<c>Mixed <b>content</b></c>
</in-xml> | let $in-xml-2 := | <in-xml xmlns:x="http://x">
<a>123</a>
<x:a>456</x:a>
<c>Mixed <x:a>content</x:a></c>
</in-xml> | return |
XQuery Example | Results |
---|
functx:remove-elements(
$in-xml-1,
'c') |
<in-xml>
<a>123</a>
<a>456</a>
</in-xml> |
functx:remove-elements(
$in-xml-1,
('a','b')) |
<in-xml>
<c>Mixed <b>content</b>
</c>
</in-xml> |
functx:remove-elements(
$in-xml-2,
'x:a') |
<in-xml>
<a>123</a>
<c>Mixed <x:a xmlns:x="http://x">content</x:a>
</c>
</in-xml> |
Depends OnSee AlsoHistory |
Recommended Reading:
|