XQuery/Special Characters

From Wikibooks, open books for an open world
Jump to navigation Jump to search

Motivation[edit | edit source]

You want to control where you put special characters such as newlines and quote characters in your XML files.

Method[edit | edit source]

We will create XQuery variables (referents) to the decimal encoded character values using the &#NN; notation where NN is the decimal number for this character in the character set. We can then add these variables anywhere in the output stream.

Example Program[edit | edit source]

In this example we will create a variable $nl had have it refer to the newline character. We will then put this in the middle of a string.

xquery version "1.0";
let $nl := "
"
let $string := concat("Hello", $nl, "World")
return $string

Returns:

  Hello
  World

The following shows how both quote and newline special characters can be created.

let $nl := "
"
let $quote := """
let $string := concat($quote, "Hello", $nl, "World", $quote)
return $string

Returns:

  "Hello
  World"

Note that the string length of these variables string-length($nl) and string-length($quote) is only one character.

Other Useful Escape Characters[edit | edit source]

let $open-curly := '{' (: for { :)
let $closed-curly := '}' (: for } :)
let $space := ' ' (: space :)
let $tab := '	' (: tab :)
let $ampersand := '&' (: ampersand :)
let $zwsp := '​' (: zero width space :)

Using Zero Width Space Characters for Line Breaks[edit | edit source]

If you have URLs that appear in the text to ensure they break gracefully when hyphenation is enabled:

let $zwsp := '​' (: this is the unicode character for a zero-width space :)
let $break-before-hint := replace($node, '([%?])', concat($zwsp, '$1'))
let $break-after-hint := 
   replace($break-before-hint, '([\.=&])', concat('$1', $zwsp))
return
        $break-after-hint

Contributed by Joe Wicentowski in March of 2014

References[edit | edit source]

For other characters see the following table: