2010-04-09 3 views
7

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

Рубрики: Сегодняшние & # 8226; AP источники: & lt; b & gt; Obama & lt;/b & gt; выбрать для Правосудие снимает: Новости - Отдых Мир - & lt; a href = & quot; http://shar.es/mqMAG">http://shar.es/mqMAG</a>

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

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

Как я могу иметь сбежавшие символы Unencoded так пишет <, а тх & л;

Я попытался сделать это, но replacelike он всегда заменяет & lt; & lt;!

сноска: заменить ($ с, "& Лт;", "<")

ответ

2

Зависит от 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 процессоры будут иметь расширение, чтобы сделать это за вас. Надеюсь, это поможет.

3

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

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

return xdmp:unquote ($d) 
3

в Exist, использование Util: разобрать():

util:parse(concat("<top>","&lt;c&gt;asdf&lt;/c&gt;",</top>")‌​) 
+0

Хотя эта ссылка может ответить на этот вопрос, то лучше включать основные части ответа здесь и укажите ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. – Yaroslav

+1

Как и в самом деле :-(- библиотека библиотеки eXist имеет функцию parse, которая будет анализировать строку при условии, что она хорошо сформирована XML. Uniless известно, что строка имеет один корень, лучше всего добавить верхний элемент : util: parse (concat ("", "<c> asdf </c >",) –

+0

Лучше добавьте свой комментарий к ответу, – Yaroslav

Смежные вопросы