2012-11-29 9 views
6

Stiamo utilizzando Jsoup per analizzare, manipolare ed estendere un modello html. Finora tutto funziona bene fino a quando si tratta di singole citazioni utilizzate in combinazione con attributi HTMLJsoup modifica l'output da virgolette singole a virgolette doppie su attributi HTML

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

Questo frammento di codice HTML viene convertito in

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

che in conflitto con i dati JSON interno che è specificato come valida con doppi apici solo

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

quindi abbiamo bisogno di costringere Jsoup a NON cambiamento quei singoli apici per raddoppiare le virgolette, ma come? Attualmente questo è il nostro codice per analizzare e produrre contenuti 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

Questo potrebbe essere un bug nell'implementazione di Jsoup. Puoi segnalare (o anche meglio discuterne con gli sviluppatori) su http://jsoup.org/bugs – Vulcan

+0

Non sono sicuro di aver capito qual è il problema qui. Puoi fornire un esempio del tuo output finale e un esempio dell'output che vorresti avere invece? Stai dicendo che stai finendo con '' quando ti aspetti ' '? Se è così, perché non aspettate ''? –

+0

" non è valido, quindi cosa devo fare con quello o mi sbaglio? E sì il modello prima dell'elaborazione è 'data-attr = ''' e con l'aiuto di Jsoup sto aggiungendo Json tra le virgolette singole. Ma una volta eseguito il rendering e il salvataggio del modello risultante ottengo 'data-attr =" {"dati": "valore"} "' ma mi aspetto 'data-attr = '{" dati ":" valore "}'' – MatthiasLaug

risposta

2

È necessario HTML codificare il valore JSON prima metterlo in l'attributo data-attr. Quando lo fa, si dovrebbe finire con questo:

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

Anche se questo sembra abbastanza scoraggiante, in realtà è HTML valido. Quando il codice JavaScript corrispondente viene eseguito someSpan.getAttribute("data-attr"), i valori &quot; verranno trasformati automaticamente in valori ", consentendo l'accesso alla stringa JSON valida originale.

Problemi correlati