Home Partners Company
Why are you escaping my angle brackets?

Why are you escaping my angle brackets?

by Minollo
December 10, 2008 0 Comments

In the recent past more than one XQuery user has asked me the same question: why is XQuery escaping my angle brackets? One of the examples of such problem looked something like this:[cc lang="xquery"]let $input :=

book 1 book 2

for $book in $input/book return (string(""), $book/text(), string(""))[/cc]
...and the result is:[cc lang="xquery"] < book_123 >book 1</ book_123 > < book_456 >book 2</ book_456 > [/cc]
Indeed XQuery is escaping (converting the character into entities) those angle brackets; but rightfully so! What the user is trying to do is to output XML elements whose name and value are dynamically computed; but what that XQuery is doing is to output *text*, not elements; that's why escaping is taking place.
What the user is really trying to do is what XQuery supports through computed constructors; computed constructors allow to create elements "dynamically", without any need to worry about angle brackets, escaping or anything like that.
Changing the XQuery to use computed constructors is easy:[cc lang="xquery"] let $input :=

book 1 book 2

for $book in $input/book return element {concat("book_", $book/@isbn)} {$book/text()} [/cc]This time the result of the XQuery is what the user is looking for:[cc lang="xquery"] book 1 book 2 [/cc]
This is just something to remember if you ever hit a similar scenario; as it often happens, if the XQuery you are writing to process or create XML looks too cumbersome, most likely it is!

Minollo

View all posts from Minollo on the Progress blog. Connect with us about all things application development and deployment, data integration and digital business.

Comments
Comments are disabled in preview mode.