Hi Folks,
 
I have written an xquery transform whose purpose is to convert mixed content
that marked up in Schema A into the same mixed content but marked up using
Schema B.  It's not just a simple matter of renaming elements - so I have
implemented a recursive node-by-node approach using an algorithm similar to
the following:
 
declare function cxtn:format-source-by-node($node as node) as node()*


{


    (


     typeswitch ($node)


        case text()


            return (


                $node,


                if (exists($node/following-sibling::node()[1])) then


 
cxtn:format-source-by-node($node/following-sibling::node()[1]) 


                else text {""}


            )


        case element (t) (: Title :)


            return (


                element title {string($node)},


                if (exists($node/following-sibling::node()[1])) then


 
cxtn:format-source-by-node($node/following-sibling::node()[1]) 


                else text {""}


            )


        case element (v) (: Volume :)


            return (


                element volume {string($node)},


                if (exists($node/following-sibling::node()[1])) then


 
cxtn:format-source-by-node($node/following-sibling::node()[1])


                else text {""}


            )


        case element ()


            (: Unexpected element - tag it as text and process the next node
in the list :)


            return (


                text {string($node)},


                if (exists($node/following-sibling::node()[1])) then


 
cxtn:format-source-by-node($node/following-sibling::node()[1]}


                else text {""}


            )


        (: No other node types need to be processed here, so if encountered
just return a text node :)


        default return text {""}


    )


};






What I'm left with is a node list that is attached to another nodelist and
eventually wrapped in a parent element, e.g.,
 
               element node-list { cxtn:format-source-by-node(
$some-starting-node) }
               
The results work as expected, except that when a text node is encountered
that contains only a space character, it is stripped away.
 
This is not boundary space, it is space between elements, so the input:
 
               <t>Title</t> <v>Volume</v>
 
is converted to:
 
               <title>Title</title><volume>Volume</volume>
 
where the space between the 2 elements has been removed.
 
Can someone tell me how to preserve this space?
 
Thank you!
 
Tim
 
_______________________________________________
General mailing list
[email protected]
http://xqzone.com/mailman/listinfo/general

Reply via email to