2017-08-30 8 views
0

私は、HTMLコードを読み込み、HTMLを解析し、内容(人が読めるテキスト)を取得してXMLファイルに保存するJavaプログラムを開発しています。場合によっては、HTMLコードには',"文字などが含まれていますが、それぞれ'とと書かれていることもあります。Java XML APIは"から&に変換されます。

適切な手順に従ってXMLを構築します。 DocumentクラスとElementクラスを使用し、Transformer,DomSourceStreamResultクラスを使用してXMLファイルを作成します。

ファイルを保存すると、シンボルが&に置き換えられていることがわかりました。私はそれが正しいことを知っています。しかし、'&&aposにも変換されます。

また、DocumentオブジェクトをStringオブジェクトに変換してから、その文字列をStringEscapeUtils.unescapeXml(String s)メソッドに渡して、XMLエンティティをそのままにしました。ただし、&エンティティを&に変換しないため、無効なXMLファイルが作成されます。

(私はOutputKeys.ENCODINGは "UTF-8" と "XML" にOutputKeys.METHODに設定されています。)

+1

6つの文字「&a p o s;」を含む文字列をDOM文書のテキストノードに書き込んで、テキストノードが '&a m p; a p o s;テキストノードには、エスケープされていないテキスト(つまり、単一の文字 '' ')が含まれている必要があり、シリアライザはエスケープするかどうかを決定します。 –

答えて

1

問題は、あなたのHTMLの解析と、ないあなたのXML出力です。 HTML & apos;一重引用符なので、& apos; HTMLでは、パーサーは一重引用符としてそれを渡す必要があります。

あなたはどのパーサーを使用していますか? Jsoupのような一般的なパーサは、そのエラーを起こしません。

+0

それは問題ではありません。私が '''か '' 'のどちらかを持っていても構いません。問題は、XMLパーサーが、 'apos;'や ''; ''などが続くことに気づかずに '&'シンボルを見て、 '&'に変換して '& 'とすることです。しかし、テキストが "George&Nick"の場合、もちろん '&'は '&'に変換されるべきです。 – George

+1

はい、問題はありますが、XMLシリアライザでは間違いがありません。私はあなたが他の点で指摘されているにもかかわらず、なぜそれを考えるのか分かりませんが、それは誤った考えです。 – kumesana

関連する問題