2 votes

eXist XQuery wrap variable dans CDATA

Je me demandais s'il était possible d'envelopper le contenu d'une variable (qui pourrait contenir du html désordonné) dans une section cdata.

J'utilise XQuery avec eXist et je n'arrive pas à le faire fonctionner.

J'ai essayé

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

Dans les deux cas, la variable n'est pas remplacée par son contenu, mais reste $data et {$data} respectivement.

J'ai également essayé d'utiliser concat et d'autres fonctions de chaîne de caractères, mais le résultat est le suivant <![CDATA[ devenir &lt;![CDATA[ .

Le $data contient les données http get/post d'un éditeur html wysiwyg.

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

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

Quelqu'un sait-il comment il faut procéder ? Merci d'avance.

0voto

joewiz Points 3447

@Alejandro a raison. Voir l'article de Priscilla Walmsley XQuery livre pp. 280-281. "Tout le texte d'une section CDATA est pris au pied de la lettre ; il n'est pas possible d'inclure des expressions fermées dans une section CDATA."

Si vous souhaitez traiter le "HTML désordonné" en corrigeant les bits malformés, vous pouvez consulter le logiciel NekoHTML. util:parse-html() fonction. Passez la chaîne HTML désordonnée, et vous obtiendrez un nœud XML bien formé à l'autre bout.

0voto

Chris Wallace Points 205

Si vous voulez encoder du HTML bien formé mais arbitraire sous forme de chaîne, par exemple pour l'inclure dans une description KML, utilisez util:serialise().

eg.

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"))

L'effet est le même que si le XML était enfermé dans CDATA, avec les caractères XML réservés encodés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X