VB6(SP4)、WIN2000、IE6(SP1)で開発をしています。
XMLの操作をしていて、BODYノード以下を別のDOMのBODY直下にアペンド
しているのですが、マシンによってエラーが発生してしまいます。
メッセージは「XMLドキュメント内では最上位の要素に限り取得できます」です。
A.appendChild B.selectCingleNode("//Body")
の部分で起きます。
A、BはともにDOMDocumentです。
Aは空のBodyノードを持っており、BのBodyノードには子ノードがあります。
動くマシンとmsxml.dllのバージョンを比較してみたのですが一致しています。
msxml3.dllもインストールされていますが、参照設定はmsxml.dllを
指定しています(エラーの出るマシンも出ないマシンも同じです)
XMLにかかわるものは何か他にもあるのでしょうか。
ご存知のかたがいらっしゃいましたらご教示ください。
よろしくお願いします
解決しました。
レジストリで、MSXML3の情報が混在し
こちらが優先となっていたためのようです。
xmlinst.exeですべてのMSXML関連の情報を削除し、
新たにMSXML.DLLをレジストリ登録したら
動くようになりました。
どうもありがとうございました。
# 既に解決されているようなので、余計なお世話かもしれませんが…。
> A.appendChild B.selectCingleNode("//Body")
> の部分で起きます。
> A、BはともにDOMDocumentです。
そのコードだと、エラーが出ない方が問題な気がします。
正しくは、
A.documentElement.appendChild B.selectSingleNode("//Body")
では無いでしょうか?
今回の場合、例えば、
A.loadXML "<test><Body/></test>"
B.loadXML "<test><Body><data/></Body></test>"
のようなXML構造だとして、
A.appendChild B.selectSingleNode("//Body")
が成り立ってしまうと、A側は
<test><Body/></test><Body><data/></Body>
になってしまいますよね。
それから、セキュリティ上の問題と、パフォーマンスの問題から、
可能な限り、MSXML4(SP2)を利用される事をお奨めします。
# もし、MSXML3を使わなければならないのであれば、せめて、
# セキュリティパッチは最新の物をあてるようにしてください。
魔界の仮面弁士さん
レスありがとうございます。
このソースは、過去に他の人が作ったものなのですが、
相手先の環境のことがあり、勝手にソースをいじれないんです…
とりあえず自分のマシンでも動かす必要があったので方法を
模索しておりました。
さて
A.appendChild B.selectCingleNode("//Body")
の前に、
A.loadXML "<?xml version= …><Body></Body>"というコードがあるのですが、
実行後は、AのXMLプロパティは空になっていました(msxml.dllをレジストリ登録)
msxml3.dllにすると同プロパティは<?xml version="1.0"><Body></Body>
でしたので、エラーになって当然ですね。
ご助言ありがとうございました。
いずれ全体の環境のアップグレードはあると思うので、心に留めておきます。
ツイート | ![]() |