トップ回答者
MSXMLを使用してXMLの構造確認(整形型の)をコマンドから行う方法

質問
-
はじめての質問です。
よろしくお願いいたします。
OS:Windows XP
MSXMLのVer.は6
下記サイトのValidate.js を使用してテストを行っています。
http://www.mlab.im.dendai.ac.jp/~yamada/web/tool/msxml/
しかしながら、上記のjava scriptだけでは、エンティティ(実態参照文字&xxx;等)があった場合エラーが出てしまいます。
そこで、エンティティのみDTDで設定したところ、“DTDは禁止されています"とエラーがでたので、
下記一行を追加してDTDの使用を許可してやりました。
xmlObj.setProperty("ProhibitDTD", false);
これでDTDを使用できるようになったのですが、
今度は、エンティティ以外の宣言(要素や属性の構造について)も求められるようになりました。
当然と言えば当然なのかもしれませんが…
私が希望するXML構造確認パーサーは、整形型(Well-formed)の確認までで良いのです。
妥当型(valid)までは必要なく、ただエンティティの表示だけは欲しいと考えています。
XMLでエンティティを使用しつつ、要素や属性は無視できる方法はありませんでしょうか?
よろしくお願いいたします。
回答
-
大抵同じ問題で困っている人がいるので、まず web 検索です。
msxml prohibitdtd - Google Search
3 番目ぐらいに解決法と一緒に報告してくれている人がいました。ちなみにこれで見つからなかったら全言語で検索です。
次に手元でこの方法で解決できるか等をテスト。巧くいくことを確認。ところが件の Validate.js に適用すると失敗するのが判明します。
まあぱっと見で大体見当がつきますが msxml のバージョンの問題ですね。Validate.js は 4.0 を使っていてあちらでは 6.0 使っています。
では本当に使えないのか、と参照するのはやはり MSDN のリファレンスです。
msxml site:msdn.microsoft.com validateonparse - Google Search
日本語版は無いみたいなので英語版で。リファレンスぐらいなら英語でも大した問題はありません。一件目に msxml.domdocument2 のが挙がります。
これによると setProperty ではなく、直接 validateOnParse プロパティを指定すること、msxml 2.0 からサポートされていることが分かります。
あとは動作確認して終了。
すべての返信
-
ご回答有難うございます。
まさにベストアンサーです。
MSXMLもjava scriptの関数も曖昧なまま、
何時間もネットで調べて、まったく分からなかった難問が
一瞬で解決しました!!!!
今回教えていただいた.validateOnParseという記述や類似関数(?)は、
どこかの資料サイトや参考資料を見れば載っているものなんでしょうか?
わたしは、MSXMLについて書き込みしてあるサイトと
このMSDNに載っているサンプル資料ぐらいしか当てがなかったもので…
重ね重ねの質問ですみません。
余裕があったらで結構ですので、おねがいします。
まずは、本題の質問への回答有難うございました。
大変感謝してます。
-
大抵同じ問題で困っている人がいるので、まず web 検索です。
msxml prohibitdtd - Google Search
3 番目ぐらいに解決法と一緒に報告してくれている人がいました。ちなみにこれで見つからなかったら全言語で検索です。
次に手元でこの方法で解決できるか等をテスト。巧くいくことを確認。ところが件の Validate.js に適用すると失敗するのが判明します。
まあぱっと見で大体見当がつきますが msxml のバージョンの問題ですね。Validate.js は 4.0 を使っていてあちらでは 6.0 使っています。
では本当に使えないのか、と参照するのはやはり MSDN のリファレンスです。
msxml site:msdn.microsoft.com validateonparse - Google Search
日本語版は無いみたいなので英語版で。リファレンスぐらいなら英語でも大した問題はありません。一件目に msxml.domdocument2 のが挙がります。
これによると setProperty ではなく、直接 validateOnParse プロパティを指定すること、msxml 2.0 からサポートされていることが分かります。
あとは動作確認して終了。