2012-11-29 43 views
6

我們使用Jsoup來解析,操作和擴展html模板。到目前爲止一切正常,直到它來組合使用HTML單引號屬性Jsoup將輸出從單引號更改爲HTML屬性的雙引號

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

即HTML片段轉換爲

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

將與被指定爲有效的內部JSON數據衝突用雙引號只有

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

,所以我們需要強制Jsoup到改變那些單引號加雙引號,但如何?目前,這是我們解析和生成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

這可能是Jsoup實現中的一個錯誤。您可以在http://jsoup.org/bugs – Vulcan

+0

上報告(或者甚至更好,與開發者討論)我不確定我明白這裏的問題是什麼。你能提供一個最終輸出的例子,並且你想有一個輸出例子嗎?當你期望''?如果是這樣,爲什麼你不期望'? –

+0

"是無效的json,那麼我該怎麼做,或者我錯了?是的,在處理之前的模板是'data-attr ='''並且在Jsoup的幫助下,我在單引號之間添加了Json。但是一旦渲染並保存了結果模板,我會得到'data-attr =「{」data「:」value「}」'但我期望'data-attr ='{「data」:「value」}'' – MatthiasLaug

回答

2

您需要HTML之前編碼JSON值將其放入data-attr屬性。當你這樣做的時候,你應該得到這個:

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

雖然這看起來相當艱鉅,它實際上是有效的HTML。當您的相應JavaScript執行someSpan.getAttribute("data-attr")時,&quot;值將自動轉換爲"值,使您可以訪問原始的有效JSON字符串。