これはよくある質問のようですが、SOでは見つかりませんでした。
アプリケーションで使用する必要があるMSXMLのバージョン、さらに重要なのはどのように決定すればよいですか?
MSXML3、4、5、6があります。
最近、MSXML v4を使用するいくつかのコードを calling-wcf-service-by-vbscript に投稿しました。 AnthonyWJonesは、私は4ではなく3または6を使用するべきではなく、おそらく3を使用すべきだと投稿しました。確かにv5ではありません!
どうして?アプリで使用するMSXMLのバージョンを選択するための基準について詳しく知りたいのですが。
ボーナス質問:誰かが時間の経過とともにMSXMLのさまざまなバージョン間の違いの概要を持っていますか?
これまでの要約:
Internet Explorerで適切なバージョンのMSXMLを使用する は Microsoftのxmlteamからのブログ の良いエントリーです。
Win2kより前のWindows OSバージョンをサポートする必要がある場合は、MSXML3を使用してください。それ以外の場合は、MSXML6を使用します。
MSXML4はメンテナンスモードです。
MSXML5は、MS-Office外での使用が実際にサポートされることはありませんでした。
数年前の仕事でも同じ決断をしなければなりませんでした。
MSDNの状態 バージョン6が最適です。ただし、SDKにはマージモジュールがなく、バージョン4とは異なり、アプリケーションに配布することはできません。バージョン4はバージョン6に置き換えられ、バージョン5は特にMS Office用でした。古いマシンでは、バージョン3がターゲットバージョンのままです。
私がやったことは、優雅な低下アプローチをとり、最初に6を使用しようとし、そのバージョン4に失敗し、次にそのバージョン3に失敗しました(コードはC++):
inline bool CXMLDocument::CreateXMLDOMFactory(void)
{
wxMutexLocker lock(sm_mXMLDOMFactory);
if(!sm_pXMLDOMFactory)
{
::CoGetClassObject(CLSID_DOMDocument60, CLSCTX_ALL, 0, IID_IClassFactory, reinterpret_cast<void **>(&sm_pXMLDOMFactory));
if(!sm_pXMLDOMFactory)
{
::CoGetClassObject(CLSID_DOMDocument40, CLSCTX_ALL, 0, IID_IClassFactory, reinterpret_cast<void **>(&sm_pXMLDOMFactory));
if(!sm_pXMLDOMFactory)
::CoGetClassObject(CLSID_DOMDocument30, CLSCTX_ALL, 0, IID_IClassFactory, reinterpret_cast<void **>(&sm_pXMLDOMFactory));
}
}
return sm_pXMLDOMFactory != 0;
}
バージョン4からバージョン6に移行した後、測定可能なパフォーマンスの向上に気づきましたが、この利点を得るためにドキュメントでNewParser
プロパティを明示的に設定する必要があります。例:
pDocument->setProperty(_bstr_t(L"NewParser"), VARIANT_TRUE);
また、セキュリティの考慮事項、リモートDTDなどのために、ドキュメントをロードするときにジャンプする必要があるいくつかのフープもありました。繰り返しますが、これはドキュメントのプロパティを介して行われたため、MSDNでProhibitDTD
、UseInlineSchema
、AllowXsltScript
およびServerHTTPRequest
プロパティを調べて、それらがあなたの使用法に当てはまるかどうかを確認してください。
ここにすべてのバージョンのリストがあります 。 Wikipediaの違い についての適切な議論があります。
MSXML 5は、XMLにデジタル署名できる唯一のバージョンのようです。 MSサイトによると、MSXML 6でも実行できないため、この機能が必要な場合は、MSXML 5が唯一の方法であるようです。
http://msdn.Microsoft.com/en-us/library/ms761363(VS.85).aspx "このサンプルコードは、Microsoft Officeアプリケーション用にMSXML 5.0で実装された機能を使用します。XMLデジタル署名はMXSML 6.0以降ではサポートされていません "
私は最近、最新バージョンから最も古いバージョンに優雅に分解しようとするJSライブラリを作成しました。 MSXML 3.0はほとんどのシステムで非常によくサポートされていることがわかりました。可能な場合はv。6.0を使用したかったが、一部のIE 8インストールで失敗しました。そのため、コードを変更して、最初にv 3.0、次にv 6.0、次にv 2.0を試す必要がありました。 。