要素の属性に"、<、>、&などの特殊文字を含むXMLファイルの解析に問題があります。現時点では独自のContentHandlerでXMLReaderを使用しています。残念ながら、XMLを変更することはできません。たくさんのファイル。私に何ができるか考えてみませんか?
一番!
整形式にするには、XMLを変更する必要があります。5つの魔法の文字は、適切にエンコードするか、CDATAセクションでラップして、パーサーに通過を許可するように指示する必要があります。
5つの魔法の文字が適切にエンコードされていない場合、整形式のXMLを受け取っていません。それがユーザーとの契約の基礎となるはずです。
ワンショット変更を行います。
XMLではありません。誤解を招く可能性があるため、XMLとは呼ばないでください。あなたは独自のデータ構文を扱っており、データ交換にXMLを使用することのすべての利点を逃しています。データはXMLではないため、XMLの処理に存在するすばらしいツールを使用することはできません。あなたは、XMLが発明される前に存在していたデータ交換の暗黒時代にいます。そこでは、誰もが独自のパーサーを作成し、それらを複数のプラットフォームに移植する必要がありました。この混乱からオープンスタンダードの現代の世界に切り替えるには費用がかかるかもしれませんが、投資はすぐに報われるでしょう。利害関係者の誰もが、構文が「ほぼXML」であるため、メリットを享受するという点でほぼそこにいると思い込ませないでください。XMLはオールオアナッシングです。
これはベストプラクティスではありませんが、XMLReaderで開く前に、正規表現を使用してほぼXMLを適切なXMLに変換することができます。これらの線に沿った何か(概念実証のためにjavascriptを使用するだけです):
var xml = '<root><node attr="bad attr chars...<"&>..."/></root>';
xml = xml.replace(/("[^"]*)&([^"]*")/, '$1&$2')
xml = xml.replace(/("[^"]*)<([^"]*")/, '$1<$2')
xml = xml.replace(/("[^"]*)>([^"]*")/, '$1>$2')
xml = xml.replace(/("[^"]*)"([^"]*")/, '$1"$2')
alert(xml);