• 締切済み

属性の値に特殊文字が大量にあるとMSXMLで読み込めない

MSXMLを使って、属性の値に特殊文字(「<」「>」「&」など)が 大量に使われているXMLを読みこもうとすると失敗します。 正常なXMLと認識されないようです。 「Load」を使ってファイルから読み込んだ場合もダメ。 「LoadXML」で文字列から読み込んだ場合もダメ。 以下のようなVBAコードで再現できます。 --------- Dim oDom As New MSXML2.DOMDocument With oDom.appendChild(oDom.createElement("root"))   With .Attributes.setNamedItem(oDom.createAttribute("attr"))     '.nodeValue = String(65533, "<") 'OK     .nodeValue = String(65534, "<") 'NG   End With End With oDom.loadXML oDom.XML '←正しく読み込めない --------- MSXML4でもMSXML6でも同様でした。 これはバグ、それとも仕様なのでしょうか。 探してもそれらしい資料が見つかりません。 どなたかわかる方、教えてください。 補足ですが、 実は同様のXMLファイルをIE6に読ませようとした場合にも、エラー表示されます。 エラーメッセージは「エラーを特定できません」。 FireFoxだとOKのようです。

みんなの回答

  • seastar3
  • ベストアンサー率69% (99/142)
回答No.1

 私もXSLの動作実験をしてみて、< がエラーになり困った覚えがあります。エスケープシーケンスの &gt; で記述し、対処しましたが、おそらく、クロスサイトスクリプティング攻撃を防ぐために、タグとマルチコマンド区切り記号などを読まないようにしているのだろうと考えています。  一度、エスケープシーケンスに変換する関数か独自の置き換えルーチンを経た文字列を扱えばよろしいでしょう。

katyua
質問者

補足

回答ありがとうございます。 一応、エスケープについては考慮していました。 たとえば「<」の繰り返しを属性に入れると以下のようなXMLになりますが、 <root attr="&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;" /> この「&lt;」を、ある程度以上(65534回ほど?)繰り返すと、とたんにMSXMLで読み込めない、IEでもエラーになって表示できなくなります。 いくつかの環境で試しましたが今のところ再現性があります。 ちなみに何がやりたかったかというと、属性に別のXMLデータを文字列として格納しようとしたのです。 XMLなので、結果的に「<」「>」がたくさん出てきて、(エスケープしていても)今回の現象が発生しました。 属性にそんな大きなデータを入れるな、ということなのかもしれませんが。 ただそれを裏付けるような文献を紹介していただけると助かります。

関連するQ&A

専門家に質問してみよう