Hi folks,

 

This may be a simple xquery syntax issue, but I've cut my teeth with xquery
in MarkLogic and thought I'd ask the question here.

 

There are times that I need to build a node in a function using conditional
logic.  For example, given the following function:

 

declare function aas:build-value-element($qname as xs:string,

  $value as xs:string) as node()

{

    if ($value ne "") then element value { attribute name {$qname}, $value}

    else ()

};

 

then if a blank value is passed in, e.g.

 

aas:build-value-element("surname ", "")

 

then an error is returned:

            [1.0-ml] XDMP-AS: (err:XPTY0004)
aas:build-value-element("author-surname", "") -- Invalid coercion: () as
node()

 

So the question is, what is the best way to return an empty node?  What I
have been doing to get around this is to return a blank text node, e.g.:

 

declare function aas:build-value-element($qname as xs:string,

  $value as xs:string) as node()

{

    if ($value ne "") then element value { attribute name {$qname}, $value}

    else text {""}

};

 

but the result is that the return node has the extra node in it, albeit a
blank text node.

 

Are there any best practices for handling this?  Is this really an issue -
in all reality does the blank text node get stripped off when storing the
results in an XML document?

 

Thanks for the help!

 

Tim Meagher - AAOM Consulting

 

 

_______________________________________________
General mailing list
[email protected]
http://xqzone.com/mailman/listinfo/general

Reply via email to