Mercurial > hg > mpdl-group
view software/eXist/webapp/mpdl/_stuff/futureDev/insert.xql @ 15:e99964f390e4
diverse Fehlerbehebungen
| author | Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de> |
|---|---|
| date | Mon, 29 Aug 2011 17:40:19 +0200 |
| parents | 1ec29fdd0db8 |
| children |
line wrap: on
line source
xquery version "1.0"; module namespace mpdl-text = "http://www.mpiwg-berlin.mpg.de/ns/mpdl/text"; declare function mpdl-text:insert($fragment as element(), $externalObjects as element()*) { let $firstObject := $externalObjects[1] let $xmlNodeId := $firstObject/@xmlNodeId let $posNode := $fragment//*[@xmlNodeId = $xmlNodeId] let $before := $firstObject/@before let $boolBefore := if ($before = "true") then true() else false() let $charPosStr := $firstObject/@charPos let $charPos := if($charPosStr != "" and not(empty($charPosStr))) then number($charPosStr) else -1 let $newNode := $firstObject/content let $size := count($externalObjects) let $otherObjects := if ($size > 1) then subsequence($externalObjects, 2, $size) else () let $insertedFragment := mpdl-text:insert($fragment, $posNode, $boolBefore, $charPos, $newNode) let $result := if ($size >= 1) then mpdl-text:insert($insertedFragment, $otherObjects) else $fragment return $result }; declare function mpdl-text:insert($element as element(), $node, $before, $charPos, $newNode) { if ($element = $node and $before and $charPos = -1) then ($newNode, element {node-name($node)} {$node/@*, for $child in $node/node() return if ($child instance of element()) then mpdl-text:insert($child, $node, $before, $charPos, $newNode) else $child }) else if ($element = $node and not($before) and $charPos = -1) then (element {node-name($node)} {$node/@*, for $child in $node/node() return if ($child instance of element()) then mpdl-text:insert($child, $node, $before, $charPos, $newNode) else $child }, $newNode) else if ($element = $node and $charPos >= 0) then util:parse(mpdltext:insertAtCharPos(util:serialize($node, ()), util:serialize($newNode, ()), $charPos)) else element {node-name($element)} {$element/@*, for $child in $element/node() return if ($child instance of element()) then mpdl-text:insert($child, $node, $before, $charPos, $newNode) else $child } };
