2009-07-28 7 views
0

J'utilise eXist pour un projet au travail et j'ai rencontré un problème pour lequel je n'arrive pas à trouver une solution.Préservation des balises HTML dans XQuery

J'ai un script xquery qui met à jour un document existant déjà dans la base de données. Une partie des données à mettre à jour contient du code HTML, en particulier les balises <p> et </p>. Je n'arrive pas à obtenir eXist/XQuery pour arrêter d'échapper le HTML. Il a besoin de pour être conservé dans sa forme originale. Voici une version très simple de ce que je fais:

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

local:clean est la fonction suivante:

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

Plus tard dans le code mettre à jour un élément XML spécifique

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

Maintenant, cela fonctionne parfaitement si Je ne fais que transmettre des données enveloppées dans un ensemble de balises (ie <p>foo</p>). Si je fais <p>foo</p><p>bar</p>, j'obtiens une valeur nulle placée dans $text.

Je me suis cogné la tête contre le bureau pendant un jour et demi maintenant en essayant de comprendre pourquoi cela ne fonctionne pas. Toute aide pour résoudre ce problème serait grandement appréciée.

Répondre

0

Il semble que ce soit un problème avec util:parse spécifiquement, pas le reste de votre code (et je ne vois pas d'autre moyen de faire ce que vous voulez ici). Avez-vous essayé de tester spécifiquement util:parse sur l'exemple d'entrée que vous avez donné dans la question (c'est-à-dire <p>foo</p><p>bar</p>) pour vérifier qu'il n'effectue pas correctement l'analyse d'un fragment multi-nœuds?

0

Une estimation: <p>foo</p><p>bar</p> n'est pas bien formée (pas d'élément racine) tandis que <p>foo</p> est bien formée (un élément racine). Pour essayer util:parse-html au lieu de util:parse.

Questions connexes