以下、一応まとめ。
問題の根本的な原因
HTMLとXMLとでは利用できる実体参照の範囲が異なるため。HTMLと同じ調子でエスケープしてXMLに流し込むとエラーになってしまいます。特にDTDを指定しない場合、XMLで使用できる実体参照は以下のものだけです。
- &(&)
- <(<)
- >(>)
- "(")
- '(')
- ∞(∞)
- …(…)
- ×(×)
解決策
解決策としては次のどれか。- DTDを読み込む
- &を&に変換する
- 実体参照を数値参照に変換する(∞ → ∞)
- <![CDATA[ ]]>で括る
参考リンク
これに関しては以下を参考にさせていただきました。ありがとうございます。ここギコ!: RSS内の実体参照
文字実体参照(実体参照).数値文字参照(文字参照)を RSS1.0 で表示する – 日々のこと