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