2012-11-29 11 views
6

Używamy Jsoup do parsowania, manipulowania i rozszerzania szablonu html. Do tej pory wszystko działa bez zarzutu, dopóki nie dojdzie do pojedynczych cytatów wykorzystanych w połączeniu z atrybutów HTMLJsoup zmienia wyjście z pojedynczego cudzysłowu na podwójny cudzysłów na atrybutach HTML

<span data-attr='JSON'></span> 

To urywek HTML jest konwertowane do

<span data-attr="JSON"></span> 

które będą sprzeczne z wewnętrzną danych JSON, który jest określony jako ważny z cudzysłów tylko

{"param" : "value"} //valid 
{'param' : 'value'} //invalid 

więc musimy zmusić Jsoup NOT zmiany te apostrofów podwójnie cytować, ale jak? Obecnie jest to nasz kod do parsowania i tworzenia treści html.

pageTemplate = Jsoup.parse(new File(mainTemplateFilePath), "UTF-8"); 
pageTemplate.outputSettings().escapeMode(Entities.EscapeMode.xhtml); 
pageTemplate.outputSettings().charset("UTF-8"); 

... adding some html 

pageTemplate.html(); // will output the double quoted attributes :(
+0

To może być błąd w implementacji Jsoup. Możesz zgłosić (lub nawet lepiej, omówić to z programistami) na http://jsoup.org/bugs – Vulcan

+0

Nie jestem pewien, czy rozumiem, jaki jest tutaj problem. Czy możesz podać przykład ostatecznego wyniku i przykład wyjścia, które chciałbyś mieć zamiast tego? Czy mówisz, że kończysz na '' gdy oczekujesz ' '? –

+0

" nie jest prawidłowy json, więc co mam z tym zrobić, czy też się mylę? I tak, szablon przed przetwarzaniem to 'data-attr = ''' i przy pomocy Jsoup dodam Json między pojedynczymi cudzysłowami. Ale po renderowaniu i zapisywaniu wynikowego szablonu otrzymuję 'data-attr =" {"data": "wartość"} "' ale oczekuję 'data-attr = '{" data ":" wartość "}'' – MatthiasLaug

Odpowiedz

2

Trzeba HTML zakodować wartość JSON przed wprowadzenie go do atrybutu data-attr. Gdy to zrobisz, powinieneś skończyć z tym:

<span data-attr="{&quot;param&quot;:&quot;value&quot;}"></span> 

Chociaż wygląda to dość zniechęcająco, jest to właściwie poprawny HTML. Kiedy odpowiedni JavaScript wykona someSpan.getAttribute("data-attr"), wartości &quot; zostaną automatycznie przekształcone w wartości ", dając ci dostęp do oryginalnego, prawidłowego ciągu JSON.

Powiązane problemy