Вы можете запустить его через рекурсивную функцию переключения типов со специальной обработкой для элемента X
на normalize-space()
на text()
(или любую другую, более конкретную c замену ведущих символов возврата каретки:
Таргетинг конкретно на элемент X
и его text()
:
declare function local:filter($nodes){
for $node in $nodes
return
typeswitch ($node)
case text() return $node
case attribute() return $node
case comment() return $node
case processing-instruction() return $node
case element (X) return element {name($node)} {( $node/@*, $node/node() except $node/text(), $node/text()/normalize-space())}
default return element {name($node)} {($node/@*, local:filter($node/node()))}
};
Или, в более общем смысле, normalize-space()
для всех text()
узлов:
declare function local:filter($nodes){
for $node in $nodes
return
typeswitch ($node)
case text() return normalize-space($node)
case attribute() return $node
case comment() return $node
case processing-instruction() return $node
default return element {name($node)} {($node/@*, local:filter($node/node()))}
};