Mercurial > hg > mpdl-group
view software/eXist/webapp/mpdl/_stuff/futureDev/insert.xql @ 9:1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
author | Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de> |
---|---|
date | Tue, 22 Feb 2011 16:03:45 +0100 |
parents | |
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 } };