2010-04-09 22 views
7

Tengo una variable en xQuery de tipo xs: cadena con el valor de un fragmento HTML codificado (el contenido de un tweet de Twitter). Se ve así:Cómo descodificar XML escapado con xQuery

Titulares-Hoy & # 8226; Fuentes AP: & lt; b & gt; Obama & lt;/b & gt; elija La publicación de justicia se retira: Noticias - Descanse Of World - & lt; a href = & quot; http://shar.es/mqMAG">http://shar.es/mqMAG</a>

Cuando intento escribir esto en un bloque de HTML, necesito que la cadena se desactive para que el fragmento de HTML sea interpretado por el navegador. En cambio, la cadena se está escrito como es y el navegador está rindiendo como sólo texto (por lo que se ve < a href = "bla ....) Así es como yo estoy escribiendo esta cadena:.

{entrada $/átomo: contenido/texto()}

¿Cómo puedo tener los caracteres de escape sin codificar, por lo que escribe < en lugar del tha & lt;

he tratado de hacer esto, pero una replacelike siempre reemplaza el & lt; con & lt;!

fn: reemplazar (s $, "& lt;", "") <

Respuesta

2

Depende de a qué procesador XQuery está utilizando ... La manera más fácil es que el uso de un procesador que tiene una extensión que maneja esto por ti. Por ejemplo, con Saxon y la siguiente XML:

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

puede escribir un XQuery que utiliza la función saxon:parse() a hacer lo que quiera:

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

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

El resultado de ese es:

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

Creo que la mayoría (?) Los procesadores XQuery tendrán una extensión para hacer esto por usted. Espero que ayude.

3

En MarkLogic puede utilizar la siguiente consulta:

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

return xdmp:unquote ($d) 
3

de existir, el uso util: parse():

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

Mientras que este enlace puede responder a la pregunta, es mejor incluir el partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. – Yaroslav

+1

Como de hecho tiene :-(- La utilidad de la biblioteca eXist tiene un análisis de función que analizará una cadena siempre que sea un XML bien formado. Uniless es saber que la cadena tiene una sola raíz, es mejor agregar un elemento superior : util: parse (concat ("", "<c> asdf </c >", ")) –

+0

Mejor añada su comentario a la respuesta, edite y agregue lo que necesita – Yaroslav

Cuestiones relacionadas