Переменная eXist XQuery в CDATA - PullRequest
1 голос
/ 26 марта 2011

Мне было интересно, возможно ли обернуть содержимое переменной (которая может содержать грязный HTML) в раздел cdata.

Я использую XQuery с eXist и просто не могу заставить его работать.

Я пытался

<![CDATA[ $data ]]>
<![CDATA[ {$data} ]]>

В обоих случаях переменная не заменяется своим содержимым, но остается $ data и {$ data} соответственно.

Я также пытался использовать concat и другие строковые функции, но в результате <![CDATA[ стал &lt;![CDATA[.

$ data содержит данные http get / post из html wysiwyg editor.

xquery version "1.0";
declare namespace request="http://exist-db.org/xquery/request";

let $data := request:get-parameter("content" , "")
return <![CDATA[ {$data} ]]>

Кто-нибудь сейчас, как это должно быть сделано? Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 30 марта 2011

Если вы хотите закодировать некоторый правильно сформированный, но произвольный HTML в виде строки, например, чтобы включить в описание KML, используйте util: serialise ()

например.

xquery version "1.0";
declare namespace util="http://exist-db.org/xquery/util";

let $data := <div><h1>stuff</h1><a href="url"> <img src="image"/></a></div>
return
   util:serialize($data,"method=xml"))

Эффект такой же, как если бы XML был заключен в CDATA с зарезервированными зарезервированными символами XML.

0 голосов
/ 27 марта 2011

@ Алехандро прав.См. Книгу Присциллы Уолмсли XQuery , стр. 280-281.«Весь текст в разделе CDATA взят буквально; невозможно включить вложенные выражения в раздел CDATA.»

Если вы хотите справиться с «грязным HTML», исправляя некорректные биты, вы можетехотите проверить функцию на базе NekoHTML: parse-html () .Передавая грязную строку HTML, вы получите правильно сформированный узел XML на другом конце.

...