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のようです。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
私もXSLの動作実験をしてみて、< がエラーになり困った覚えがあります。
エスケープシーケンスの > で記述し、対処しましたが、おそらく、クロスサイトスクリプティング攻撃を防ぐために、タグとマルチコマンド区切り記号などを読まないようにしているのだろうと考えています。一度、エスケープシーケンスに変換する関数か独自の置き換えルーチンを経た文字列を扱えばよろしいでしょう。
この回答への補足
回答ありがとうございます。
一応、エスケープについては考慮していました。
たとえば「<」の繰り返しを属性に入れると以下のようなXMLになりますが、
<root attr="<<<<<<<<<" />
この「<」を、ある程度以上(65534回ほど?)繰り返すと、とたんにMSXMLで読み込めない、IEでもエラーになって表示できなくなります。
いくつかの環境で試しましたが今のところ再現性があります。
ちなみに何がやりたかったかというと、属性に別のXMLデータを文字列として格納しようとしたのです。
XMLなので、結果的に「<」「>」がたくさん出てきて、(エスケープしていても)今回の現象が発生しました。
属性にそんな大きなデータを入れるな、ということなのかもしれませんが。
ただそれを裏付けるような文献を紹介していただけると助かります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Android VBA、フォルダのパスに環境文字 ㉑ があり、VBAが機能しません。 2 2022/07/27 09:16
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- フリーソフト Windowsの特殊文字を削除や変換したい そんなフリーソフトはありますか? 3 2022/11/09 00:05
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBSでごみ箱に捨てたファイルの...
-
属性の値に特殊文字が大量にあ...
-
thunderbardでエラーが出ます。
-
急にXMLパースエラーが表示され...
-
エクセルVBA インデックスが有...
-
2GSDメモリカードに書き込...
-
ファイルをアップロードするとh...
-
ファイルopenエラーになってし...
-
DellのHPが開かない!!
-
EXCEL このブックには更新でき...
-
勝手にdatファイルになるのです...
-
録音アプリのPCM録音で4時間録...
-
WordでURLをクリックしてそのペ...
-
サーバーに転送したファイルが0...
-
PDFファイルをホームページ...
-
既存のページをホームページビ...
-
メール転送の禁止
-
ワード文書がXMLドキュメントに...
-
ハイパーリンクを新規ウィンド...
-
ギガファイル便って女の人のエ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
急にXMLパースエラーが表示され...
-
コンパイル時のエラーについて...
-
VB6 使用中ファイルの確認
-
ホームページビルダーの【×】マ...
-
ファイルopenエラーになってし...
-
ワードがなかなか閉じないです
-
リンカ 致命的エラーについて
-
属性の値に特殊文字が大量にあ...
-
thunderbardでエラーが出ます。
-
Excelのハイパーリンクがエラー...
-
local by flywheelについて
-
VBAを記述したEXCELファイルを...
-
フォルダの削除について
-
エクセルVBA インデックスが有...
-
韓国に送った添付ファイルexcel...
-
電子書籍epub変換について
-
セッション削除でエラー
-
ファイルをアップロードするとh...
-
Borland C++ Compilerのエラー...
-
WinMx使用中に・・・「ファイル...
おすすめ情報