2009-07-28 8 views
0

Я использую eXist для проекта на работе, и у меня возникла проблема, из-за которой я не могу найти решение.Сохранение HTML-тегов внутри XQuery

У меня есть скрипт xquery, который обновляет существующий документ, который уже находится в базе данных. Часть данных, которые необходимо обновить, содержит HTML, в частности <p> и </p> теги. Я не могу заставить eXist/XQuery перестать ускользать от HTML. Это нуждается в, чтобы сохранить его в оригинальной форме. Вот очень простой вариант того, что я делаю:

<pre> 
declare variable $raw-content := request:get-parameter('content', '') 
declare variable $content := local:clean($raw-content) 
</pre> 

local:clean является следующая функция:

<pre> 
declare function local:clean($text) { 
    let $text := util:parse($text) 
    return $text 
}; 
</pre> 

Позже в коде я обновляю конкретный XML элемент

<pre> 
{update replace $n/sports-content/article/nitf/body/body.content with <body.content>{$content}</body.content>} 
</pre> 

Теперь это работает отлично , если Я только передаю данные, обернутые в один набор тегов (то есть <p>foo</p>). Если я делаю <p>foo</p><p>bar</p>, я получаю нулевое значение, размещенное в $text.

Я стою головой о стол в течение полутора дней, пытаясь понять, почему это не работает. Любая помощь в решении этой проблемы была бы весьма признательна.

ответ

0

Вроде бы проблема с util:parse конкретно, а не остальная часть вашего кода (и я не вижу альтернативного способа делать то, что вы хотите здесь). Пробовали ли вы тестирование util:parse конкретно на вводном примере, который вы задаете в вопросе (т. Е. <p>foo</p><p>bar</p>), чтобы убедиться, что он действительно не анализирует многоузловой фрагмент правильно?

0

Догадка: <p>foo</p><p>bar</p> не является хорошо сформированным (без корневого элемента), а <p>foo</p> - хорошо сформированный (один корневой элемент).

Так что попробуйте util:parse-html вместо util:parse.

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