2017-08-30 85 views
0

我正在開發一個Java程序,它讀取HTML代碼,解析HTML,獲取內容(人類可讀文本)並將其存儲在XML文件中。有時,HTML代碼包含',"個字符(等等),但有時它們也分別被編寫爲'"Java XML API將"轉換爲&「

我按照適當的程序構建XML。我使用DocumentElement類,並且使用Transformer,DomSourceStreamResult類來創建XML文件。

問題是當保存文件時,我看到&符號被替換爲&。我知道這是正確的。但它也會將'轉換爲&&apos

我也嘗試將Document對象轉換爲String對象,然後將該字符串傳遞給StringEscapeUtils.unescapeXml(String s)方法,以使XML實體保持不變。但是,它不會將&實體轉換爲&,從而導致無效的XML文件。

(我已經設置了OutputKeys.ENCODING爲 「UTF-8」 和OutputKeys.METHOD爲 「XML」。)

+1

我懷疑你正在寫一個字符串,其中包含六個字符'&p o s;'到DOM文檔中的文本節點,以便文本節點被序列化爲&a m p;一個朋友;'。文本節點應該包含未轉義的文本(即單個字符'''),串行器將決定是否轉義。 –

回答

1

問題是與你的HTML解析,而不是與你的XML輸出。在HTML &;是單引號,所以當有&時,在HTML中,你的解析器應該把它作爲一個單引號給你。

你在使用什麼語法分析器?流行的解析器如Jsoup不會出現這種錯誤。

+0

這不是問題。我不介意我是否有'''或'''。我認爲問題在於當XML解析器看到'&'符號而沒有注意到後面跟有「或」等,因此將其轉換爲「&」,因此具有「&」。但是,如果文本是「George&Nick」,那麼'&'應該轉換爲'&'。 – George

+1

是的,這是問題,沒有XML序列化程序不會犯這個錯誤。我不知道爲什麼你認爲儘管被指出,但這是一個不正確的想法。 – kumesana