2010-04-09 12 views
7

Mam zmienną w xQuery typu xs: string z wartością zakodowanego fragmentu kodu HTML (zawartość twittera Twittera). Wygląda to tak:Jak rozszyfrować kod XML z XQuery?

Nagłówki - dziś & # 8226; Źródła AP: & lt; b & gt; Obama & lt;/b & gt; wybierz dla Wymiar sprawiedliwości wycofuje się: Wiadomości - Odpoczynek Świat - & lt; a href = & quot; http://shar.es/mqMAG">http://shar.es/mqMAG</a>

Kiedy próbuję napisać to w bloku HTML, potrzebuję, aby ciąg znaków został usunięty, aby fragment kodu HTML był interpretowany przez przeglądarkę. Zamiast łańcuch jest coraz rozpisane jak i przeglądarka renderuje go jak tylko tekst (tak widać < a href = "bla ....) Oto jak piszę się ten ciąg.

? {$ entry/atom: content/text()}

Jak mogę mieć znaki o odkodowane tak pisze < raczej tha & lt;

próbowałem zrobić to ale replacelike zawsze zastępuje & lt; z & lt;!

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

Odpowiedz

2

Zależy który XQuery procesora używasz ... Najprostszym sposobem jest być przy użyciu procesor, który ma rozszerzenie, które obsługuje to za Ciebie. Na przykład, z Saxon i następnego XML:

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

Można napisać XQuery, który wykorzystuje funkcję saxon:parse() robić to, co chcesz:

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

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

Wynik tego jest:

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

Myślę, że większość (?) XQuery procesorów będzie mieć rozszerzenie, aby zrobić to za Ciebie. Nadzieja, która pomaga.

3

W MarkLogic można użyć poniższego zapytania:

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

return xdmp:unquote ($d) 
3

w istnieje, użycie util: parse():

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

Chociaż ten link może odpowiedzieć na pytanie, lepiej jest zawierać Istotne części odpowiedzi tutaj i zapewniają link do odniesienia. Odpowiedzi dotyczące linków mogą stać się nieprawidłowe, jeśli strona z linkami się zmieni. – Yaroslav

+1

Tak naprawdę ma: --(- Biblioteka eXist posiada funkcję parsowania, która będzie parsować ciąg znaków, pod warunkiem, że jest poprawnie sformatowany XML Bez żadnej wiedzy jest znany, że ciąg ma jeden root, najlepiej jest dodać górny element : util: pars (concat ("", "<c> asdf </c >", ")) –

+0

Lepiej dodaj komentarz do odpowiedzi, edytuj i dodaj to, co jest potrzebne – Yaroslav

Powiązane problemy