Как расшифровать экранированный XML с помощью xQuery - PullRequest
7 голосов
/ 10 апреля 2010

У меня есть переменная в xQuery типа xs: string со значением закодированного фрагмента HTML (содержание твиттера в твиттере). Это выглядит так:

Headlines-Today • AP источники: & Л; б & GT; Обама & л; / б & GT; выбрать для Пост юстиции отзывается: Новости - Отдых Мира - & lt; a HREF = & Quot; http://shar.es/mqMAG">http://shar.es/mqMAG</a&gt;

Когда я пытаюсь записать это в блоке HTML, мне нужно, чтобы строка не экранировалась, чтобы фрагмент HTML был интерпретирован браузером. Вместо этого строка записывается как есть, а браузер отображает ее как просто текст (так что вы видите

{$ записи / атом: Содержание / текст ()}

Как можно, чтобы экранированные символы не были закодированы, чтобы он писал <скорее, что & lt; </p>

Я пытался сделать такую ​​замену, но она всегда заменяет & lt; с & lt; !

fn: replace ($ s, "& lt;", "<") </p>

Ответы [ 3 ]

3 голосов
/ 16 апреля 2010

В MarkLogic вы можете использовать следующий запрос:

let $d := '<a>&lt;c&gt;asdf&lt;/c&gt;</a>' 

return xdmp:unquote ($d)
3 голосов
/ 21 апреля 2010

в eXist, используйте util: parse ():

util:parse(concat("<top>","&lt;c&gt;asdf&lt;/c&gt;",</top>")‌​)
2 голосов
/ 14 апреля 2010

Зависит от того, какой процессор XQuery вы используете ... Самый простой способ - использовать процессор с расширением, которое обрабатывает это для вас. Например, с Saxon и следующими XML :

<a>&lt;c&gt;asdf&lt;/c&gt;</a>

Вы можете написать XQuery , который использует функцию saxon:parse(), чтобы делать то, что вы хотите:

declare namespace saxon = "http://saxon.sf.net/";

<a>{
  saxon:parse(doc('test.xml')/a)
}</a>

Результат от этого:

<a>
  <c>asdf</c>
</a>

Я думаю, что большинство (?) XQuery процессоров будет иметь расширение, чтобы сделать это для вас. Надеюсь, это поможет.

...