Description
The functx:remove-elements-deep function removes descendant elements from all of the nodes in $nodes based on name. The $names argument is a sequence of strings that represent element names to remove. Prefixes can (and must) be used in the $names values for elements that are prefixed in the input documents. You can also specify wildcard values "*", "*:" and ":*" in the second argument. See the description for functx:name-test for details.
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 |
$nodes |
node()* |
root(s) to start from |
$names |
xs:string* |
the names of the elements to remove |
return value |
node()* |
XQuery Function DeclarationSee XSLT definition. | declare namespace functx = "http://www.functx.com";
declare function functx:remove-elements-deep
( $nodes as node()* ,
$names as xs:string* ) as node()* {
for $node in $nodes
return
if ($node instance of element())
then if (functx:name-test(name($node),$names))
then ()
else element { node-name($node)}
{ $node/@*,
functx:remove-elements-deep($node/node(), $names)}
else if ($node instance of document-node())
then functx:remove-elements-deep($node/node(), $names)
else $node
} ; |
Exampleslet $in-xml-1 := | <in-xml>
<a>
<b>b1</b>
<c>c1</c>
</a>
<c>Mixed <b>content</b></c>
</in-xml> | let $in-xml-2 := | <in-xml xmlns:x="http://x">
<a>
<x:b>b1</x:b>
<c>c1</c>
</a>
<c>Mixed <b>content</b></c>
</in-xml> | return |
XQuery Example | Results |
---|
functx:remove-elements-deep(
$in-xml-1,
'b') |
<in-xml>
<a>
<c>c1</c>
</a>
<c>Mixed </c>
</in-xml> |
functx:remove-elements-deep(
$in-xml-1,
'a') |
<in-xml>
<c>Mixed <b>content</b>
</c>
</in-xml> |
functx:remove-elements-deep(
$in-xml-1,
('b','c')) |
<in-xml>
<a/>
</in-xml> |
functx:remove-elements-deep(
$in-xml-2,
'x:b') |
<in-xml>
<a>
<c>c1</c>
</a>
<c>Mixed <b>content</b>
</c>
</in-xml> |
Depends OnSee AlsoHistory |
Recommended Reading:
|